1

我正在编写一个 numpy/cython 程序来计算小矩阵(很多)的小数。

我当前的函数看起来像(将 mat wrt. 的小数计算到第 ii 行,col jj):

cdef float minor(np.ndarray[DTYPE_t, ndim = 2] mat,int ii,int jj): 
    rows = range(mat.shape[0])
    col = range(mat.shape[0])
    del rows[ii]
    del col[jj]

    cdef np.ndarray[DTYPE_t, ndim = 2] rM = (mat[rows])[:,col]

    cdef float val =  (-1)**(ii+jj) * np.linalg.det(rM)

    return val

经过一些基准测试后,这条线

cdef np.ndarray[DTYPE_t, ndim = 2] rM = (mat[rows])[:,col]

比较费时间。有没有更好的方法从二维数组中删除一行和一列?

你的,

cp3028

4

1 回答 1

1

看起来您正在从 复制内存(mat[rows])[:,col],分配和复制是一个缓慢的过程。难道不能简单地np.linalg.deg对原地块进行函数调用mat,而不是复制它并计算副本上的行列式吗?

于 2012-05-30T13:14:23.980 回答