我有一个用于标量的C函数库,例如
double f(double x, double y, double z) {
result = x + 2*y - 3*z;
return result;
}
我想在numpy数组上使用这些函数,但是想以某种方式向量化操作并避免对每个数组元素进行f
的几次C调用。我找到的大多数示例都是针对已支持数组的函数(f(double *x)
或f(double x[])
)。
这里的正确方法是什么?重写f
以支持数组? (库中有一些 lot 函数。)编写一个C包装器,可能使用函数指针?或者ctypes,cython等提供更简单的替代方案吗?
这可能已被问过数百次,所以即使只是指向相应文档的指针也会有所帮助。
答案 0 :(得分:2)
我个人认为重写函数使用数组是最好,最干净的方法。但是,另一种选择是已经提到的包装器,但使用原始函数作为inline function,e。克。
// Function
inline double f(double x, double y, double z) {
return x + 2*y - 3*z;
}
// Wrapper
void fWrapper(double *x, double *y, double *z, double *ret, int N) {
int i;
for (i = 0; i < N; i++) {
ret[i] = f(x[i], y[i], z[i]);
}
}
现在编译器应该用函数的代码替换函数调用。