multiprocessing.Array (python): 预期浮动而不是 numpy.ndarray 实例

multiprocessing.Array (python): float expected instead of numpy.ndarray instance

我已经遵循了多处理在线手册。我想我已经给它一个数组 mp.Array。为什么它期望浮点数而不是数组?

我的脚本 -

import multiprocessing as mp
import numpy as np

pdb_num = 1000

fitting_theta = mp.Array('d', np.zeros((pdb_num,pdb_num)))
fitting_deviation = mp.Array('d', np.zeros((pdb_num,pdb_num)))

它给出了一个错误 -

float expected instead of numpy.ndarray instance

谢谢。

编辑:

完整的回溯 -

  File "/lustre/beagle2/danielhskerr/python/min_sq_fitnewres.py", line 70, in <module>
fitting_theta = mp.Array('d', np.zeros((pdb_num,pdb_num)))
  File "/soft/python/2.7/2.7.1/lib/python2.7/multiprocessing/__init__.py", line 256, in Array
return Array(typecode_or_type, size_or_initializer, **kwds)
  File "/soft/python/2.7/2.7.1/lib/python2.7/multiprocessing/sharedctypes.py", line 87, in Array
  obj = RawArray(typecode_or_type, size_or_initializer)
  File "/soft/python/2.7/2.7.1/lib/python2.7/multiprocessing/sharedctypes.py", line 61, in RawArray
result.__init__(*size_or_initializer)
TypeError:  float expected instead of numpy.ndarray instance

请仔细阅读 multiprocessing 的文档: https://docs.python.org/2/library/multiprocessing.html#multiprocessing.Array

可用于进程间编组的类型非常有限,因此您不能对它们使用任意 object/type(例如 numpy 数组)。

这可能是您问题的答案

Use numpy array in shared memory for multiprocessing

然而,锁定访问的要求可能会过度影响性能。使用带有浮点数的普通数组来生成你的进程,然后从它们构建 numpy 数组。但是,如果这些解决方案之一适合您的问题,则取决于那个问题。