我已经遵循了多处理的在线手册。我想我给了它一个数组给mp。array。为什么它期望一个浮点数而不是数组?
My script -
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
请仔细阅读多处理文档:https://docs.python.org/2/library/multiprocessing.html multiprocessing.Array
可用于在进程之间进行封送的类型非常有限,因此您不能为它们使用任意对象/类型(例如numpy-array)。
这可能是你问题的答案
在共享内存中使用numpy数组进行多处理
但是,锁访问的要求可能会过度影响性能。使用带有浮点数的普通数组来生成进程,然后从它们构建numpy数组。但是,如果其中一个解决方案适合您的问题取决于问题本身。