我想对包含在列表中的非常大的numpy数组进行操作(加,乘,除),如代码的第一部分所示。 list_arrays是一个长度为24的列表,每个元素都是形状为[360、10、241、480]的4D数组,但是运行代码时出现内存错误。
我试图将列表分块为更小的列表(附加了代码的第二部分),并对一个分块进行所需的操作,并将其保存到npy文件,然后对下一个分块进行相同的操作,直到完成所有操作为止(第三部分)。
但是在遍历一个块之后,内存仍然很忙。在遍历一个块以获取下一个块的空间后如何释放内存。
##### 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文件,这些文件包含一个大小相同但具有新值的数组