在numpy向量上使用标量C函数

时间:2012-04-23 07:15:25

标签: c vector numpy

我有一个用于标量的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等提供更简单的替代方案吗?

这可能已被问过数百次,所以即使只是指向相应文档的指针也会有所帮助。

1 个答案:

答案 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]);
    }
}

现在编译器应该用函数的代码替换函数调用。