【问题标题】:Fast way of turning a list of indexes into a boolean mask将索引列表转换为布尔掩码的快速方法
【发布时间】:2021-02-16 06:46:34
【问题描述】:

这是一个非常简单的问题,但我没有找到一个简单的答案。假设您有一个大数组,该数组的索引列表,并且您想使用这些索引生成一个布尔掩码。

import numpy as np

# A large array
arr = np.random.uniform(0., 1., 500000)

# A list of indexes (much larger in real code)
idx = [89, 3455, 3, 26789]

# The boolean mask
msk = []
for _ in range(len(arr)):
    if _ in idx:
        msk.append(True)
    else:
        msk.append(False)
msk = np.array(msk)

上面的 for 块可以工作,但对于大型 idx 数组会变慢。什么是实现这一目标的快速方法?我知道np.where() can be used 反过来(布尔到索引),这里也可以用吗?

【问题讨论】:

    标签: python arrays numpy boolean


    【解决方案1】:

    使用 numpy zeros 和索引有一种更简单的方法。

    msk = np.zeros(arr.shape, dtype=np.bool)
    msk[idx] = True
    

    对大数组很有效

    【讨论】:

      猜你喜欢
      • 2021-03-01
      • 2022-10-18
      • 2012-05-11
      • 2015-10-05
      • 1970-01-01
      • 2016-12-10
      • 1970-01-01
      • 2019-11-01
      • 1970-01-01
      相关资源
      最近更新 更多