Python 共享非连续访问Numpy数组

Python 共享非连续访问Numpy数组,python,numpy,multiprocessing,shared-memory,Python,Numpy,Multiprocessing,Shared Memory,我有一个numpy数组,我想在一堆python进程之间以一种不涉及副本的方式共享它。我使用包从现有numpy数组创建了一个共享numpy数组 我的问题是,每个子进程都需要访问数组中随机分布的行。目前,我使用sharedmem包创建了一个共享numpy数组,并将其传递给每个子进程。每个进程还有一个需要访问的行列表idx。当我执行以下操作时,问题在子流程中: #idx = list of randomly distributed integers local_array = shared_arra

我有一个numpy数组,我想在一堆python进程之间以一种不涉及副本的方式共享它。我使用包从现有numpy数组创建了一个共享numpy数组

我的问题是,每个子进程都需要访问数组中随机分布的行。目前,我使用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数组的随机访问,有什么好的解决方案


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

花式索引会产生副本,因此,如果要避免副本,则需要避免花式索引,因为这是没有办法的。

不管它值多少钱,这与它是共享内存无关。Numpy数组在内存中必须是连续的,因此任何奇特的索引(例如,使用一个标记数组进行索引)都会返回一个副本。这适用于任何numpy数组。要么使用较小的标记块,要么迭代,而不是切片。@JoeKington-你说得对。通常,numpy阵列存在问题。
local_array = shared_array[start:stop,:]