共享非连续访问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数组的随机访问有什么好的解决方案?

子进程需要只读访问(所以不需要锁定访问)。

+1

无论它值多少钱,这与共享内存无关。 Numpy数组在内存中必须是连续的,所以任何花哨的索引(例如索引一组索引)总是返回一个副本。对于任何numpy数组都是如此。既可以处理更小的痕迹或迭代,而不是切片。 – 2011-12-19 21:17:49

花式索引会产生一个副本,所以如果你想避免副本,那么你需要避免花哨的索引。