Я хочу выполнять операции (сложение, умножение, деление) для очень больших числовых массивов, включенных в список, как показано в части I кода.
list_arrays - это список длиной 24, каждый элемент имеет 4D массив формы [360, 10, 241, 480], но я получаю ошибку памяти, когда запускаю код.
Я попытался разделить список на более мелкие списки (часть II кода прилагается), выполнить необходимые операции над фрагментом и сохранить его в файле npy, затем сделать то же самое со следующим фрагментом, пока я не закончу со всеми из них ( Часть III).
Но после зацикливания фрагмента память все еще занята. Как освободить память после зацикливания на чанке, чтобы освободить место для следующего чанка.
##### Part I ######
n_l = []
for i in range(len(list_arrays)):
if i ==0:
m = list_arrays[i]/2 * 8
else:
m = ((list_arrays[i]+list_arrays[i-1])/2) * 8
n_l.append(m)
#n_l is a new list of same length as list_arrays but includes arrays with new values
##########################################
##### Part II ######
def chunking(l, n): ##Chunking function
for i in range(0, len(l), n):
yield l[i:i+n]
chunks = list(chunking(list_arrays, 5))
# chunks is a list of 5 lists each list includes five 4D arrays
##########################################
##### Part III ######
for i in range(len(chunks)):
if i == 0:
for ii in range(len(chunks[i])):
if ii == 0:
m = (chunks[i][ii] /2) * 8
else:
m = ((chunks[i][ii] + chunks[i][ii -1]) /2) * 8
np.save('./chunk_%d/%d.npy'%i, m)
if i != 0:
for ii in range(len(chunks[i])):
if ii == 0:
m = ((chunks[i][ii]+ chunks[i-1][-1]) /2) * 8
else:
m = ((chunks[i][ii] + chunks[i][ii -1]) /2) * 8
np.save('./chunk_%d/%d.npy' %i, m)
#########################################
Я ожидаю, что 25 файлов npy каждый файл содержит массив того же размера, но с новыми значениями