【发布时间】:2012-08-07 23:28:25
【问题描述】:
我有一个不包含数据值的 numpy 数组。我屏蔽了那些没有数据的值,这样它们就不会影响我的计算:
array = numpy.ma.masked_values(array, options['ndv'], copy=False)
然后我使用 memmove 将 numpy 数组放入共享的 ctypes 数组中:
def ndarray_to_shmem(array):
""" Converts a numpy.ndarray to a multiprocessing.Array object.
The memory is copied, and the array is flattened.
"""
arr = array.reshape((-1, ))
data = RawArray(_numpy_to_ctypes[array.dtype.type],
arr.size)
ctypes.memmove(data, array.data[:], len(array.data))
return data
返回以下堆栈跟踪:
ctypes.memmove(data, array.data[:], len(array.data))
ctypes.ArgumentError: argument 2: <type 'exceptions.TypeError'>: wrong type
是否可以使用 memmove 将屏蔽数组移动到共享的 ctypes 数组中?
【问题讨论】:
-
当您移动掩码数组时,您究竟期望发生什么?您是否希望仅获得未屏蔽的值?是否应该将无值条目转换为 nan?
-
转换为 NaN。在执行一些计算后,我将转换回输入的无数据值。
标签: python arrays numpy ctypes memmove