我想将2-d数组存储为共享内存数组,因此多处理模块创建的每个进程都可以访问2-d数组。但似乎只允许矢量。如果我将以下示例中的形状从(6,1)更改为(2,3),则该示例不会起作用,并且它表示" TypeError:只有length-1数组可以转换为Python标量& #34;
from multiprocessing import Process, Value, Array
import numpy as np
def f(n,a):
a[:] = np.ones(shape=(6,1), dtype=float)[:]
if __name__ == '__main__':
tmp = np.zeros(shape=(6,1), dtype=float)
print tmp
arr = Array('f', tmp)
p1 = Process(target=f, args=(1,arr))
p1.start()
p1.join()
print 'done'
print arr[:]
答案 0 :(得分:3)
这是因为mutiprocessing.Array
是python' array
类型的包装,而不是numpy.ndarray
和python' array
类型不包含支持多维度。具体来说,请查看initializer
的文档:
一个新数组,其项目受typecode限制,并从可选的初始值设定值初始化,该值必须是列表,字符串或可迭代的相应类型的元素。
你有一个可迭代的(一个多维数组),但它会产生视图/数组,而不是相应类型的元素。