共享非连续访问Numpy数组

时间:2011-12-15 19:45:42

标签: python numpy multiprocessing shared-memory

我有一个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

它创建数组的副本而不是另一个视图。该数组非常大并且在共享之前首先对其进行操作,以便每个进程访问连续的行范围,如

local_array = shared_array[start:stop,:]

花了太长时间。

问题:在不涉及复制数组的python进程之间共享对numpy数组的随机访问有什么好的解决方案?

子进程需要只读访问(因此无需锁定访问)。

1 个答案:

答案 0 :(得分:1)

花式索引会导致复制,因此如果您想避免复制,则需要避免使用花哨的索引。