【发布时间】:2021-07-29 03:45:28
【问题描述】:
我不知道如何将numpy.ndpointer 用作python ctypes 结构中的字段。这是一些基本代码,展示了我如何在不使用 ndpointer 的情况下做到这一点,但我想知道是否可以使用 ndpointer,如果可能的话!
import numpy as np
import ctypes
class MyStruct_Working(ctypes.Structure):
_fields_ = [
('a', ctypes.c_ssize_t),
('values', ctypes.POINTER(ctypes.c_double))]
def __init__(self, a, values):
self.a = a
self.values = values.ctypes.data_as(ctypes.POINTER(ctypes.c_double))
class MyStruct_NotWorking(ctypes.Structure):
_fields_ = [
('a', ctypes.c_ssize_t),
('values', np.ctypeslib.ndpointer(dtype=float, flags='C_CONTIGUOUS'))]
def __init__(self, a, values):
self.a = a
self.values = values
使用上面的代码可以正常工作
m0 = MyStruct_Working(1, np.array([1,2,3]))
但是当我调用它时,我收到以下错误消息
m1 = MyStruct_NotWorking(1, np.array([1,2,3]))
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-19-8435d2743b55> in <module>
----> 1 m1 = MyStruct_NotWorking(1, np.array([1,2,3]))
<ipython-input-17-beb0591858e6> in __init__(self, a, values)
17 def __init__(self, a, values):
18 self.a = a
---> 19 self.values = values
TypeError: cannot be converted to pointer
【问题讨论】: