相关疑难解决方法(0)

使用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 中用于循环调用的快速基本线性代数

我正在尝试在 cython 中编写一个用于蒙特卡罗模拟的函数。该函数涉及多个小的线性代数运算,如点积和矩阵求逆。随着函数被调用数十万次,numpy 开销占据了很大一部分成本。三年前有人问过这个问题:在 Cython 中调用点积和线性代数运算? 我尝试使用两个答案中的建议,但第一个 scipy.linalg.blas 仍然通过 python 包装器,我并没有真正得到任何改进。第二,使用 gsl 包装器也相当慢,当向量的维度非常大时,往往会冻结我的系统。我还发现了 Ceygen 包,看起来很有希望,但似乎安装文件在上次 Cython 更新中损坏了。另一方面,我看到 scipy 正在为 lapack 开发一个 cython 包装器,但它看起来仍然不可用 ( scipy-cython-lapack) 最后,我还可以为这些操作编写自己的 C 例程,但似乎有点重新发明轮子。

总结一下:在 Cython 中是否有这种操作的方法?(因此我不认为这是重复的)或者您是否找到了更好的方法来处理我尚未见过的此类问题?

必填代码示例:(这只是一个例子,当然它仍然可以改进,但只是提供想法)

 cimport numpy as np
 import numpy as np

 cpdef double risk(np.ndarray[double, ndim=2, mode='c'] X,
     np.ndarray[double, ndim=1, mode='c'] v1, 
     np.ndarray[double, ndim=1, mode='c'] v2):

     cdef np.ndarray[double, ndim=2, mode='c'] tmp, sumX
     cdef double ret

     tmp = np.exp(X)
     sumX = np.tile(np.sum(tmp, 1).reshape(-1, 1), (1, tmp.shape[0]))
     tmp = tmp / …
Run Code Online (Sandbox Code Playgroud)

python numpy cython scipy

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

没有python对象的cython中的高效矩阵运算

我正在编写一个函数,我想尽可能多地使用 Cython 将其转换为 C。为此,我需要使用线性代数运算。这是我的功能。编辑:我学到的教训是尝试处理循环之外的线性代数,这在很大程度上是我能够做到的。否则,求助于包装 LAPACK/BLAS 或编写我自己的函数。

import numpy as np
from scipy.stats import multivariate_normal as mv
import itertools

def llf(data, rho, mu, sigma, A, V, n):
    '''evaluate likelihood by guass-hermite quadrature

    Parameters
    ----------
    data : array
        N x J matrix, columns are measurements
    rho : array
        length L vector of weights for mixture of normals
    mu : array
        L x K vector of means of mixture of normals
    sigma : array
        K x L*K matrix of variance matrices for …
Run Code Online (Sandbox Code Playgroud)

python cython scipy

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

Cython:当使用类型化的内存视图时,Cython用户是否应该实现自己的"向量"函数库?

如果我正在使用类型化的内存视图,并且我想添加两个我使用这样的内存视图表示的向量,或者使用它们的点积或其他类似的向量,Cython是否希望我自己实现这些函数?

我对此没有任何问题,但是我想知道如果我正忙于编写添加矢量/乘以标量/点积等等,我是否做错了.靠我自己 感觉就像反模式,但我不确定.

什么是正确的模式?

python numpy cython

3
推荐指数
1
解决办法
603
查看次数

标签 统计

cython ×4

python ×4

numpy ×3

scipy ×2

lapack ×1

linear-algebra ×1