我正在使用multiprocessing模块操纵numpy数组,但在尝试一些代码时遇到了问题。特别地,我正在从一个numpy数组创建ctypes数组,然后尝试将该ctypes数组返回给一个numpy数组。以下是代码:
shared_arr = multiprocessing.RawArray(_numpy_to_ctypes[array.dtype.type],array.size)
我不需要任何类型的同步锁,因此我正在使用RawArray。 ctypes数据类型是根据输入数组的dtype从字典中提取的。 这个方法非常有效。
shared_arr = numpy.ctypeslib.as_array(shared_arr.get_obj())
这里我得到了一个堆栈跟踪,指出:
AttributeError: 'c_double_Array_16154769' object has no attribute 'get_obj'
我也尝试了这篇文章中提到的方法,但是仍然出现相同的错误。
def tonumpyarray(shared_arr):
return numpy.frombuffer(shared_arr.get_obj())
我卡在了运行Python 2.6的问题上,不确定这是否是问题所在,还有可能是变量名共享的问题(我尽可能地保持内存使用率低,并且试图不在内存中重复numpy数组和ctypes数组),或者其他一些原因,因为我刚开始学习Python的这个组件。
有什么建议吗?