共享非连续访问Numpy数组
问题描述:
我有一个numpy数组,我想以一种不涉及副本的方式在一堆python进程之间共享。我使用sharedmem包从现有的numpy阵列创建共享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数组的随机访问有什么好的解决方案?
子进程需要只读访问(所以不需要锁定访问)。
答
花式索引会产生一个副本,所以如果你想避免副本,那么你需要避免花哨的索引。
无论它值多少钱,这与共享内存无关。 Numpy数组在内存中必须是连续的,所以任何花哨的索引(例如索引一组索引)总是返回一个副本。对于任何numpy数组都是如此。既可以处理更小的痕迹或迭代,而不是切片。 – 2011-12-19 21:17:49