我处于需要并行处理一个非常大的 numpy 数组 (55x117x256x256) 的情况。尝试使用通常的多处理方法传递它会产生 AssertionError,我理解这是因为数组太大而无法复制到每个进程中。因此,我想尝试将共享内存与多处理一起使用。 (我对其他方法持开放态度,只要它们不太复杂)。
我看到了一些关于使用 python 多处理共享内存方法的问题,例如
import numpy as np
import multiprocessing as mp
unsharedData = np.zeros((10,))
sharedData = mp.Array('d', unsharedData)
这似乎工作正常。但是,我还没有看到使用多维数组完成此操作的示例。
我试过将多维数组粘贴到
mp.Array
中,这给了我 TypeError: only size-1 arrays can be converted to Python scalars
。unsharedData2 = np.zeros((10,10))
sharedData2 = mp.Array('d', unsharedData2)## Gives TypeError
我可以展平阵列,但如果可以避免,我宁愿不这样做。
是否有一些技巧可以让多处理数组处理多维数据?
最佳答案
您可以使用 np.reshape((-1,))
或 np.ravel
而不是 np.flatten
制作一维 view
的阵列,没有不必要的复制扁平化:
import numpy as np
import multiprocessing as mp
unsharedData2 = np.zeros((10, 10))
ravel_copy = np.ravel(unsharedData2)
reshape_copy2 = unsharedData2.reshape((-1,))
ravel_copy[11] = 1.0 # -> saves 1.0 in unsharedData2 at [1, 1]
reshape_copy2[22] = 2.0 # -> saves 2.0 in unsharedData2 at [2, 2]
sharedData2 = mp.Array('d', ravel_copy)
sharedData2 = mp.Array('d', reshape_copy2)
关于python - 多处理 - 具有多维 numpy 数组的共享内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50270346/