The*_*dus 11 python numpy python-multiprocessing
我处于需要并行处理一个非常大的 numpy 数组 (55x117x256x256) 的情况。尝试使用通常的多处理方法传递它会产生 AssertionError,我理解这是因为数组太大而无法复制到每个进程中。因此,我想尝试将共享内存与多处理一起使用。(我对其他方法持开放态度,只要它们不太复杂)。
我看到了一些关于使用 python multiprocessing 的共享内存方法的问题,例如
import numpy as np
import multiprocessing as mp
unsharedData = np.zeros((10,))
sharedData = mp.Array('d', unsharedData)
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常。但是,我还没有看到使用多维数组完成此操作的示例。
我试过只是将多维数组粘贴到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
Run Code Online (Sandbox Code Playgroud)
我可以展平阵列,但如果可以避免,我宁愿不这样做。
是否有一些技巧可以让多处理数组处理多维数据?
您可以使用np.reshape((-1,))ornp.ravel来代替数组的np.flatten一维,而无需像 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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
936 次 |
| 最近记录: |