我正在尝试使用点积,矩阵求逆和其他基本线性代数运算,这些运算可以从Cython中获得.函数如numpy.linalg.inv(反转),numpy.dot(点积),X.t(矩阵/数组的转置).numpy.*从Cython函数调用有很大的开销,其余的函数是用Cython编写的,所以我想避免这种情况.
如果我假设用户已numpy安装,有没有办法做类似的事情:
#include "numpy/npy_math.h"
Run Code Online (Sandbox Code Playgroud)
作为一个extern,并调用这些功能?或者直接调用BLAS(或者numpy调用这些核心操作的任何东西)?
举一个例子,想象一下你在Cython中有一个函数做很多事情,最后需要进行涉及点积和矩阵求逆的计算:
cdef myfunc(...):
# ... do many things faster than Python could
# ...
# compute one value using dot products and inv
# without using
# import numpy as np
# np.*
val = gammaln(sum(v)) - sum(gammaln(v)) + dot((v - 1).T, log(x).T)
Run Code Online (Sandbox Code Playgroud)
如何才能做到这一点?如果有一个库已经在Cython中实现了这些,我也可以使用它,但没有找到任何东西.即使这些程序没有直接优化BLAS,没有numpy从Cython 调用Python模块的开销仍然会使整体事情变得更快.
我要调用的示例函数:
np.dot)np.linalg.inv)x.Tnumpy)scipy.gammaln等效,应该在C中可用)我在numpy邮件列表(https://groups.google.com/forum/?fromgroups=#!topic/cython-users/XZjMVSIQnTE …