如果Data
是(c_double*DataLength.value)
数组,则可以:
a = np.frombuffer(Data) # no copy. Changes in `a` are reflected in `Data`
如果Data
为,则POINTER(c_double)
可以使用获取numpy数组numpy.fromiter()
。它与您的问题相同,但速度更快:
a = np.fromiter(Data, dtype=np.float, count=DataLength.value) # copy
要从POINTER(c_double)
实例创建一个numpy数组而不进行复制,您可以使用.from_address()
方法:
ArrayType = ctypes.c_double*DataLength.value
addr = ctypes.addressof(Data.contents)
a = np.frombuffer(ArrayType.from_address(addr))
要么
array_pointer = ctypes.cast(Data, ctypes.POINTER(ArrayType))
a = np.frombuffer(array_pointer.contents)
两种方法都将POINTER(c_double)
实例转换为,(c_double*DataLength)
然后再将其传递给numpy.frombuffer()
。