wl2776 wl2776 - 1 month ago 13
C Question

How to make Python object behave like a numpy array?

I'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

Answer