我正在开发一个 python 2.7 模块,它使用 ctypes
从动态库运行编译函数。它包含一个类,该类包装该库中的 C 结构,表示图像,并用于从 C 代码接收数据。
动态库执行数据的深度复制,特别适用于Python包装器。
模块中的进一步处理是使用 numpy
数组完成的,因此,我应该将从 C 代码检索的数据转换为 numpy.ndarray
。
速度和内存消耗目前不是问题。
目前,我已经在该类中实现了一个方法,该方法使用 numpy.frombuffer
函数创建并返回 numpy.ndarray
。
我想知道是否可以更好地实现。
这是Python类
import ctypes as ct
import numpy as np
class C_Mat(ct.Structure):
_fields_ = [("rows", ct.c_int),
("cols", ct.c_int),
("data", ct.c_char_p),
("step", ct.ARRAY(ct.c_int64, 2)),
("data_type", ct.c_int)]
_dtypes = { 0: np.uint8,
1: np.int8,
2: np.uint16,
3: np.int16,
4: np.int32,
5: np.float32,
6: np.float64 }
def image(self):
r = np.frombuffer(self.data,
dtype=self._dtypes[self.data_type],
count=self.cols*self.step[1]*self.step[0])
r.shape = (self.cols, self.rows)
r.strides = (self.step[0], self.step[1])
return r
最佳答案
有Array接口(interface)说明 https://docs.scipy.org/doc/numpy/reference/arrays.interface.html
关于c - 如何使 Python 对象表现得像 numpy 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40398768/