Numpy 如何高效地删除数组中的部分

Numpy 如何高效地删除数组中的部分,numpy,scipy,cython,Numpy,Scipy,Cython,我正在写一个numpy/cython程序来计算小矩阵的子矩阵(很多) 我当前的函数如下所示(计算mat wrt.到第二行,col jj的次调): 经过一点基准测试,生产线 cdef np.ndarray[DTYPE_t, ndim = 2] rM = (mat[rows])[:,col] 这相当耗时。有没有更好的方法从二维数组中删除一行和一列 你的 cp3028看起来您正在从(mat[rows])[:,col]复制内存,分配和复制是一个缓慢的过程。不可能简单地在mat的块上调用np.linal

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

我当前的函数如下所示(计算mat wrt.到第二行,col jj的次调):

经过一点基准测试,生产线

cdef np.ndarray[DTYPE_t, ndim = 2] rM = (mat[rows])[:,col]
这相当耗时。有没有更好的方法从二维数组中删除一行和一列

你的


cp3028

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

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

你可能不会从cython那里得到太多的加速,因为你严重依赖C-API调用,而且你没有键入
。如果您从一开始就知道
mat
的大小,那么您可能能够对行列式和构建
rM
进行硬编码。由于您严重依赖C-API调用,并且没有键入
,因此cython的速度可能不会太快。如果您从一开始就知道
mat
的大小,则可以对行列式和建筑
rM
进行硬编码。
cdef np.ndarray[DTYPE_t, ndim = 2] rM = (mat[rows])[:,col]