【问题标题】:How do I get all the values from a NumPy array excluding a certain index?如何从 NumPy 数组中获取不包括某个索引的所有值?
【发布时间】:2011-09-15 10:05:00
【问题描述】:

我有一个 NumPy 数组,我想检索除某个索引之外的所有元素。例如,考虑以下数组

a = [0,1,2,3,4,5,5,6,7,8,9]

如果我指定索引 3,那么结果应该是

a = [0,1,2,4,5,5,6,7,8,9]

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    与调整大小一样,从 NumPy 数组中删除元素是一项缓慢的操作(尤其是对于大型数组,因为它需要分配空间并将所有数据从原始数组复制到新数组)。 应该尽量避免。

    您通常可以通过使用masked array 来避免它。例如,考虑数组a

    import numpy as np
    
    a = np.array([0,1,2,3,4,5,5,6,7,8,9])
    print(a)
    print(a.sum())
    # [0 1 2 3 4 5 5 6 7 8 9]
    # 50
    

    我们可以在索引 3 处屏蔽它的值,并且可以执行求和忽略屏蔽的元素

    a = np.ma.array(a, mask=False)
    a.mask[3] = True
    print(a)
    print(a.sum())
    # [0 1 2 -- 4 5 5 6 7 8 9]
    # 47
    

    除了sum之外,掩码数组还支持many operations

    如果确实需要,也可以使用compressed 方法移除被屏蔽的元素:

    print(a.compressed())
    # [0 1 2 4 5 5 6 7 8 9]
    

    但如上所述,尽可能避免。

    【讨论】:

    • masked_inside() 函数引用给定的值范围。问题似乎是关于屏蔽给定索引,而不是值。
    • 供参考:在 Numpy 的较新版本中,最好使用 a=np.ma.array(a) 和 a[3]=np.ma.masked(参见 docs.scipy.org/doc/numpy/reference/…)跨度>
    【解决方案2】:

    如果 a 是 NumPy 数组,则这是一个单行:

    >>> a[np.arange(len(a))!=3]
    array([0, 1, 2, 4, 5, 5, 6, 7, 8, 9])
    

    【讨论】:

    • 我发现这在删除掩码数组的行时很有用。谢谢!
    【解决方案3】:
    a_new = np.delete(a, 3, 0)
    

    3 这里是您要删除的索引,0 是轴(如果使用一维数组,则在这种情况下为零)。见np.delete

    【讨论】:

    • 如此简单,您可以提供一个列表,而不仅仅是 3 个。
    【解决方案4】:

    另一种解决方案是使用NumPy的concatenate函数:

    >>> x = np.arange(0,10)
    array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    >>> i = 3
    >>> np.concatenate((x[:i],x[(i+1):]))
    array([0, 1, 2, 4, 5, 6, 7, 8, 9])
    

    【讨论】:

    • np.concatenate() 进行复制,因此在处理大型数据集时这不是很好。
    【解决方案5】:

    应该这样做:

    In [9]: np.hstack((a[:3], a[4:]))
    Out[9]: array([0, 1, 2, 4, 5, 5, 6, 7, 8, 9])
    

    如果性能是一个问题,以下将解决:

    In [22]: a[3:-1] = a[4:]; a = a[:-1]
    

    【讨论】:

      猜你喜欢
      • 2016-10-11
      • 1970-01-01
      • 2021-03-10
      • 1970-01-01
      • 1970-01-01
      • 2017-11-08
      • 2018-07-31
      • 1970-01-01
      • 2019-09-16
      相关资源
      最近更新 更多