python - 共享非连续访问 Numpy 数组

标签 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

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

local_array = shared_array[start:stop,:]

花的时间太长了。

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

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

最佳答案

花式索引会导致复制,所以如果你想避免复制就需要避免花式索引,这是没有办法解决的。

关于python - 共享非连续访问 Numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8525705/

相关文章:

python - 如何从列表中过滤项目并将它们存储在另一个列表中?

python - joblib.load 文件加载错误

python - 在共享状态多处理中访问管理器对象

python - 运行 Selenium 生成的 python 代码后,Geckodriver 未打开

python - Jupyter:当内核就绪时以编程方式清除所有单元的输出

python - 没有名为 _version_helper 的模块

python - 写入 numpy 中的屏蔽数组

python - 在我将 2D 灰度 PIL 图像转换为 1D numpy 数组后,获得 2D numpy 数组(图像/矩阵)的最平滑方法是什么?

python - 将 python 脚本及其生成的进程的输出通过管道传输到 Linux 中的文本文件

python - 在 Django 1.6 中,connection.cursor() 是线程安全的吗?