wl2776 wl2776 - 1 year ago 68
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

. 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
arrays, therefore, I should convert data, retrieved from the C code, to

Speed and memory consumption is not an issue for now.

For now, I've implemented a method in that class, that creates and returns

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,
r.shape = (self.cols, self.rows)
r.strides = (self.step[0], self.step[1])

return r

Answer Source
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download