我想在 cython 中进行就地向量加法,所以我正在使用 scipy.linalg.cython_blas.daxpy
。
我的语法是:
daxpy(&n_samples, &tmp, &Q[0, ii], &inc, &G[0], &inc)
但是在scikit-learn code , 我读了
axpy(n_samples, -w[ii], &X_data[ii * n_samples], 1, R_data, 1)
其中 axpy 之前已定义为 daxpy。
前两个变量(分别是 int 和 double)的 & 是强制性的吗?为什么 sklearn 代码中的前两个参数没有 & ?
最佳答案
我认为这就是BLAS和CBLAS的区别。
BLAS(scipy.linalg 为您包装)使用 FORTRAN 接口(interface),因此大多数(/所有?)参数(包括简单参数,例如整数)通过指针传递。
Scikit-learn looks to use CBLAS而不是 scipy.linalg 包装器。 CBLAS 似乎定义了一个对 C 更自然的接口(interface)(按值传递的简单参数)。
因此,如果您使用的是 scipy Cython 包装器,那么您看起来是正确的。
关于python - 调用 scipy.linalg.cython_blas.daxpy 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42248311/