相关疑难解决方法(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
查看次数

使用Cython包装LAPACKE函数

我正在尝试dgtsv使用Cython 包装LAPACK函数(三对角方程组的求解器).

我遇到了这个前面的答案,但由于dgtsv不是LAPACK功能之一,scipy.linalg我不认为我可以使用这种特殊的方法.相反,我一直试图遵循这个例子.

这是我的lapacke.pxd文件的内容:

ctypedef int lapack_int

cdef extern from "lapacke.h" nogil:

    int LAPACK_ROW_MAJOR
    int LAPACK_COL_MAJOR

    lapack_int LAPACKE_dgtsv(int matrix_order,
                             lapack_int n,
                             lapack_int nrhs,
                             double * dl,
                             double * d,
                             double * du,
                             double * b,
                             lapack_int ldb)
Run Code Online (Sandbox Code Playgroud)

...这是我的瘦Cython包装_solvers.pyx:

#!python

cimport cython
from lapacke cimport *

cpdef TDMA_lapacke(double[::1] DL, double[::1] D, double[::1] DU,
                   double[:, ::1] B):

    cdef:
        lapack_int n = D.shape[0]
        lapack_int nrhs = B.shape[1]
        lapack_int ldb …
Run Code Online (Sandbox Code Playgroud)

python numpy linear-algebra cython lapack

5
推荐指数
1
解决办法
483
查看次数

标签 统计

cython ×2

numpy ×2

python ×2

blas ×1

lapack ×1

linear-algebra ×1

scipy ×1