我有一个 numpy 数组,我想以不涉及副本的方式在一堆 python 进程之间共享它。我使用 sharedmem 从现有的 numpy 数组创建一个共享的 numpy 数组包。
import sharedmem as shm
def convert_to_shared_array(A):
shared_array = shm.shared_empty(A.shape, A.dtype, order="C")
shared_array[...] = A
return shared_array
我的问题是每个子进程都需要访问随机分布在数组中的行。目前我使用 sharedmem 包创建一个共享的 numpy 数组并将其传递给每个子进程。每个进程还有一个它需要访问的行列表 idx。当我这样做时,问题出在子进程中:
#idx = list of randomly distributed integers
local_array = shared_array[idx,:]
# Do stuff with local array
它创建数组的副本而不是另一个 View 。该数组非常大,在共享之前先对其进行操作,以便每个进程访问连续范围的行,如
local_array = shared_array[start:stop,:]
花的时间太长了。
问题:在不涉及复制数组的 python 进程之间共享对 numpy 数组的随机访问的好的解决方案是什么?
子进程需要只读访问(因此不需要锁定访问)。
最佳答案
花式索引会导致复制,所以如果你想避免复制就需要避免花式索引,这是没有办法解决的。
关于python - 共享非连续访问 Numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8525705/