我想将一个Structure
对象数组作为类似的结构发送到外部函数。
我目前正在将嵌套列表/数组([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0], … ]
)转换为_FFIArray
个对象,如下所示:
class _FFIArray(Structure):
_fields_ = [("data", c_void_p),
("len", c_size_t)]
@classmethod
def from_param(cls, seq):
""" Allow implicit conversions """
return seq if isinstance(seq, cls) else cls(seq)
def __init__(self, seq):
self.data = cast(
np.array(seq, dtype=np.float64).ctypes.data_as(POINTER(c_double)),
c_void_p
)
self.len = len(seq)
但是我还需要将这些_FFIArray
对象的数组转换为具有与上面相同的两个字段的结构,并将data
字段作为指向数组的void指针。
使用以下方法调用以下类时无效:
[
[[3.5, 3.5], [4.4, 2.0], [2.6, 2.0], [3.5, 3.5]],
[[4.0, 3.0], [4.0, 3.2], [4.5, 3.2], [4.0, 3.0]]
]
class _InnerArray(Structure):
_fields_ = [("data", c_void_p),
("len", c_size_t)]
@classmethod
def from_param(cls, seq):
""" Allow implicit conversions """
return seq if isinstance(seq, cls) else cls(seq)
def __init__(self, seq):
self.arr = np.asarray([_FFIArray(s) for s in seq])
self.data= cast(self.arr.ctypes.data_as(POINTER(_FFIArray)), c_void_p)
self.len = len(self.arr)