我试图调用Matlab编码器生成的一些c代码.Matlab使用名为emxArray的ac结构来表示矩阵(在此处记录:http://www.mathworks.co.uk/help/fixedpoint/ug/c-code-interface-for-unbounded-arrays-and-structure-fields.html).
struct emxArray_real_T
{
double *data;
int *size;
int allocatedSize;
int numDimensions;
boolean_T canFreeData;
};
Run Code Online (Sandbox Code Playgroud)
我几乎没有经验ctypes,我正在努力创建一个等效的结构,然后我可以使用它来传递向量来回传递给c .so中定义的函数.
这是我到目前为止在python中的地方......
class EmxArray(ctypes.Structure):
""" creates a struct to match emxArray_real_T """
_fields_ = [('data', ctypes.POINTER(ctypes.c_double)),
('size', ctypes.POINTER(ctypes.c_int)),
('allocatedSize', ctypes.c_int),
('numDimensions', ctypes.c_int),
('canFreeData', ctypes.c_bool)]
Run Code Online (Sandbox Code Playgroud)
但是,如果我定义这个:
data = (1.1, 1.2, 1.3, 1.4)
L = len(data)
x = EmxArray()
x.data = (ctypes.c_double * L)(*data)
x.data = (ctypes.c_int * 1)(L)
Run Code Online (Sandbox Code Playgroud)
这可行
print len(x.data[:L])
for v in x.data[:L]: print v
Run Code Online (Sandbox Code Playgroud)
编辑:我已整理并采纳了Roland的建议,并可以使用提取数据
data_out = x.data[:L] …Run Code Online (Sandbox Code Playgroud)