gpt4 book ai didi

python - 来自 numpy 数组的 RawArray?

转载 作者:太空狗 更新时间:2023-10-30 01:38:05 26 4
gpt4 key购买 nike

我想跨多个进程共享一个 numpy 数组。进程只读取数据,所以我想避免制作副本。如果我可以从 multiprocessing.sharedctypes.RawArray 开始,然后使用 numpy.frombuffer 创建一个 numpy 数组,我知道该怎么做。但是如果我最初得到一个 numpy 数组怎么办?有没有办法在不复制数据的情况下用 numpy 数组的数据初始化 RawArray?或者是否有另一种方法可以在不复制数据的情况下跨进程共享数据?

最佳答案

据我所知,在分配给特定进程后,无法将内存声明为共享内存。类似的讨论可见herehere (more suitable) .

让我快速勾勒出您提到的解决方法(从 RawArray 开始,然后获取对它的 numpy.ndarray 引用)。

import numpy as np
from multiprocessing.sharedctypes import RawArray
# option 1
raw_arr = RawArray(ctypes.c_int, 12)
# option 2 (set is up, similar to some existing np.ndarray np_arr2)
raw_arr = RawArray(
np.ctypeslib.as_ctypes_type(np_arr2.dtype), len(np_arr2)
)
np_arr = np.frombuffer(raw_arr, dtype=np.dtype(raw_arr))
# np_arr: numpy array with shared memory, can be processed by multiprocessing

如果您必须从 numpy.ndarray 开始,您别无选择来复制数据

import numpy as np
from multiprocessing.sharedctypes import RawArray

np_arr = np.zeros(shape=(3, 4), dtype=np.ubyte)
# option 1
tmp = np.ctypeslib.as_ctypes(np_arr)
raw_arr = RawArray(tmp._type_, tmp)
# option 2
raw_arr = RawArray(np.ctypeslib.as_ctypes_type(np_arr.dtype), np_arr.flatten())

print(raw_arr[:])

关于python - 来自 numpy 数组的 RawArray?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26302456/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com