python - numpy 从数组中获取掩码

标签 python numpy

假设我有一个 numpy 数组

a = np.array([0, 8, 25, 78, 68, 98, 1])

和一个掩码数组b = [0, 1, 1, 0, 1]

有没有一种简单的方法来获取以下数组:

[8, 25, 68] - 这是原始数组中的第一个、第二个和第四个元素。这对我来说听起来像是一个面具。

我尝试过的最明显的方法是a[b],但这并没有产生理想的结果。 之后我尝试查看 masked operations in numpy但看起来它引导我走向错误的方向。

最佳答案

如果ab都是numpy数组,并且b严格是1和0:

>>> a[b.astype(np.bool)]
array([ 8, 25, 68])

应该指出的是,这仅在极小的情况下才会明显更快,并且范围比 @falsetru 的答案要有限得多:

a = np.random.randint(0,2,5)

%timeit a[a==1]
100000 loops, best of 3: 4.39 µs per loop

%timeit a[a.astype(np.bool)]
100000 loops, best of 3: 2.44 µs per loop

对于较大的情况:

a = np.random.randint(0,2,5E6)

%timeit a[a==1]
10 loops, best of 3: 59.6 ms per loop

%timeit a[a.astype(np.bool)]
10 loops, best of 3: 56 ms per loop

关于python - numpy 从数组中获取掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18765904/

相关文章:

python - Django/Python 中的 Celery 任务最佳实践

python - 在Python中增量计算大数组的汇总统计

python - 文件未找到错误: [WinError 3] The system cannot find the path specified: ''

python - Pandas Dataframe Parquet 数据类型?

python - 使用多线程在 python 上更快地处理图像?

python - 我在 python 中的 fft() 有问题

python - 如何在 Pygame 中模糊曲面的边缘?

python - 如何标记 OpenCV 中两个数组中都存在的特征?

python - 将 put 与多维 Numpy 数组一起使用时出现意外行为

python - OpenCV 灰度图像中轮廓图的平均强度