value error:cann't broadcast input array from shape (29097,280,212,3) into shape (280,212,3)

value error:cann't broadcast input array from shape (29097,280,212,3) into shape (280,212,3)

我有5个大型numpy数组,我想将它们合并成一个numpy数组。 使用 np.concatenate 没有帮助,因为 MemoryError:Unable 分配... 所以我决定使用 np.memmap。 我的阵列形状如下:

#print(arrayA.shape) (29097, 280, 212, 3)
#print(arrayB.shape) (16058, 280, 212, 3)
#print(arrayC.shape) (15412, 280, 212, 3)
#print(arrayD.shape) (21634, 280, 212, 3)
#print(arrayF.shape) (9477 , 280, 212, 3)

我的代码:

    import glob
    import numpy as np
    npfiles= glob.glob("D:/mycode/*.npy")
    npfiles.sort()
    #print(npfiles)
    # create a memory-mapped array 
    pred = np.memmap('memm4', dtype='uint8', mode='w+', shape=(91678,280,212,3))
    print(pred.shape)

    for i,npfile in enumerate(npfiles):
         pred[i,:,:,:]=np.load(npfile)
    np.save('D:/mycode/pred.npy',pred)

但它向我展示了这个问题“无法将形状 (29097,280,212,3) 中的输入数组广播到形状中 (280,212,3) 有人可以帮助我吗,谢谢

目前您正在将 3 维张量放入 4 维 1 i 变量包含从 0 到 4 的文件索引。因此 pred[i,:,:,:] 只有三个维度 但是您需要指出数组将存储在内存中的位置。

last_index = 0
for npfile in npfiles:
    temporary_array = np.load(npfile)
    pred[last_index:last_index+ len(temporary_array),:,:,:] = temporary_array
    last_index += len(temporary_array)

您可能还想尝试 hdf5 / 之类的东西,它可以让您轻松存储大型数组。