问题描述
当尝试将NumPy结构化数组foo
复制到Python共享内存中时,出现以下错误:
ValueError:无法将输入数组从形状(1000000)广播到形状(1000448)
将结构化数组foo
复制到SharedMemory
对象中以便可以在进程之间共享的正确方法是什么?
我们如何在fooShmArr
中添加另外448个元素?在NumPy 1.17.4和1.19.1上都进行了测试。
代码:
from multiprocessing import shared_memory
import numpy as np
if __name__ == '__main__':
# Create NumPy structured array
N = 1000*1000
keyArr = np.random.randint(0,1000*1000*1000,N).astype(np.uint32)
valArr = np.random.rand(N).astype(np.float32)
foo = np.empty(keyArr.shape[0],dtype=[('keys',keyArr.dtype),('vals',valArr.dtype)])
foo['keys'] = keyArr
foo['vals'] = valArr
# copy NumPy strucuted array into shared memory segments
fooShm = shared_memory.SharedMemory(create=True,size=foo.nbytes)
fooShmArr = np.frombuffer(fooShm.buf,valArr.dtype)])
fooShmArr['keys'][:] = foo['keys'][:]
fooShmArr['vals'][:] = foo['vals'][:]
fooShm.close()
fooShm.unlink()
错误:
Traceback (most recent call last):
File "foo.py",line 15,in <module>
fooShmArr['keys'][:] = foo['keys'][:]
ValueError: Could not broadcast input array from shape (1000000) into shape (1000448)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)