【发布时间】:2021-01-14 18:25:19
【问题描述】:
所以我正在学习ctypes,我的情况类似于以下:
我有一个共享库,其中包含实现双精度矩阵和复数矩阵的结构。我想用ctypes 包装这两个结构。我知道我可以创建两个类来包装每个结构,但我想知道是否有一种直接的方法可以通过指定数据类型来用一个类包装两个结构。
例如,也许我的库libmatrix.so 有以下源文件:
// matrix.c
struct complex {
double re;
double im;
};
struct Matrix {
int nrow;
int ncol;
double *data
};
struct CMatrix {
int nrow;
int ncol;
complex *data
};
typedef struct complex complex;
typedef struct Matrix Matrix;
typedef struct CMatrix CMatrix;
包装我的complex 结构后,可能是这样的:
class complex(Structure):
__fields__ = [("re", c_double), ("im", c_double)]
在 python 中,我想创建一个类 Matrix,它可以让我执行以下操作:
# create 2 x 3 matrix of doubles
m = Matrix(2, 3, dtype=c_double)
# create 2 x 3 matrix of complex numbers (structure that I made)
n = Matrix(2, 3, dtype=complex)
我知道 numpy 有这样的东西,我尝试查阅源代码,但不知所措。这种类型的东西有名称或有参考吗?任何方向都将不胜感激。
【问题讨论】: