1

我有一个用于标量的 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以支持数组?(库中有很多函数。)编写一个 C 包装器,也许使用函数指针?还是 ctypes、cython 等提供更简单的替代方案?

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

4

1 回答 1

2

就我个人而言,我会说重写函数以使用数组是最好和最干净的方法。但是,另一种选择是已经提到的包装器,但使用原始函数作为内联函数,例如

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

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

于 2012-04-23T09:17:55.490 回答