如何有效地删除数组的部分

时间:2012-05-17 14:18:37

标签: numpy scipy cython

我正在编写一个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

1 个答案:

答案 0 :(得分:1)

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