【问题标题】:Numpy: Indices of multiple valuesNumpy:多个值的索引
【发布时间】:2018-12-17 17:29:24
【问题描述】:

我想通过有效地索引二维数组的一些值来将它们设置为特定数字。

假设我有一个 2D numpy 数组,

A = array([[1, 6, 6],
           [9, 7, 7], 
           [10, 2, 2]])

我想获取数组中属于一组数字的索引,比如indList=[10, 1],这样我就可以将它们设置为零。但是,indList 可能是一个庞大的列表。

有没有更快的方法可以在没有 for 循环的情况下执行此操作?

作为一个for循环,

indList = [10, 1]
for i in indList:
    A[A==i] = 0

但是当indList 很大时,这可能会变得低效。

【问题讨论】:

  • 你说得对,这看起来很奇怪......修复它,它是一个 3x3 数组。

标签: python numpy indexing indices


【解决方案1】:

使用 numpy,您可以通过首先找到 indList 中元素的索引然后将它们设置为零来对其进行矢量化。

A = np.array([[1, 6, 6],
              [9, 7, 7],
              [10 ,2 ,2]])

A[np.where(np.isin(A, [10,1]))] = 0

这给了

A = [[0 6 6]
     [9 7 7]
     [0 2 2]]

【讨论】:

  • 好像np.isin 很慢,有没有比做A==10 慢很多的原因?
【解决方案2】:

从@Miket25 的回答来看,实际上不需要添加np.where 层。 np.isin(A, [10, 1]) 返回一个完全可以用作索引的布尔数组。所以干脆做

A[np.isin(A, [10, 1])] = 0

【讨论】:

    猜你喜欢
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 2016-12-05
    • 2015-08-21
    相关资源
    最近更新 更多