【问题标题】:Python: Optimize deletion of elements not aligned in a numpy arrayPython:优化删除未在 numpy 数组中对齐的元素
【发布时间】:2026-01-31 01:40:01
【问题描述】:


我正在使用 numpy 1.6.2python 2.7 处理非常大的矩阵。 给定一个N x M 矩阵A 和一个映射B,我可以在其中找到每一行要删除的元素的索引。 这是一个例子:

A =

   26   55   29   30
   31   65   34   35
   36   75   39   40
   41   85   44   45
   46   95   49   50

B =

     2
     0
     1
     3
     2

结果将是:

A =

   26   55   30
   65   34   35
   36   39   40
   41   85   44
   46   95   50

实际上,为了获得这个,我创建了一个这样的循环:

for i in xrange(size(B)):
  A[i,:] = concatenate(A[i,0:B[i]],A[i,B[i]+1:])

但它真的很慢。 有没有更快的方法来删除我需要的元素?

谢谢大家!

【问题讨论】:

    标签: python arrays performance optimization numpy


    【解决方案1】:

    您可以像这样为A 创建一个掩码:

    >>> mask = np.arange(4) != np.vstack(B)
    >>> mask
    array([[ True,  True, False,  True],
           [False,  True,  True,  True],
           [ True, False,  True,  True],
           [ True,  True,  True, False],
           [ True,  True, False,  True]], dtype=bool)
    

    然后使用它从A中过滤掉不需要的(False)值,重塑,然后重新绑定到变量名A

    >>> A = A[mask].reshape(5, 3)
    >>> A
    array([[26, 55, 30],
           [65, 34, 35],
           [36, 39, 40],
           [41, 85, 44],
           [46, 95, 50]])
    

    这应该比使用 concatenate 更快,因为它避免了为 Python for 循环的每次迭代复制数组。

    【讨论】: