相关疑难解决方法(0)

在Cython中调用点积和线性代数运算?

我正在尝试使用点积,矩阵求逆和其他基本线性代数运算,这些运算可以从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)
  • gammaln函数(类似于scipy.gammaln等效,应该在C中可用)

我在numpy邮件列表(https://groups.google.com/forum/?fromgroups=#!topic/cython-users/XZjMVSIQnTE …

python numpy cython blas scipy

25
推荐指数
1
解决办法
6056
查看次数

标签 统计

blas ×1

cython ×1

numpy ×1

python ×1

scipy ×1