我正在开发一个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 rI'm developing a python 2.7 module, that runs compiled function from a dynamic library using ctypes. It contains a class that wraps a C structure from that library, representing an image, and is used to receive data from the C code.
Dynamic library performs deep copy of data, specially for python wrapper.
Further processing in the module is done using numpy arrays, therefore, I should convert data, retrieved from the C code, to numpy.ndarray.
Speed and memory consumption is not an issue for now.
For now, I've implemented a method in that class, that creates and returns numpy.ndarray using numpy.frombuffer function.
I'm wondering, if it can be implemented better.
Here is the python class
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最满意答案
有数组接口说明https://docs.scipy.org/doc/numpy/reference/arrays.interface.html
There is the Array Interface description https://docs.scipy.org/doc/numpy/reference/arrays.interface.html
更多推荐
发布评论