python - 过滤 numpy 数组但保留原始值

标签 python arrays numpy numpy-ndarray boolean-indexing

换句话说,numpy 是否支持“筛选”?

我有两个数组:

a = np.array([1, 0, 2, 3, 0, 4])
b = np.array([1, 0, 0, 0, 0, 6])

我想要的是返回一个新数组 c,它包含基于 b 掩码的 a 的原始值:

c = a[b > 0] 
>> c
np.array([1, 4])
# but what I want is:
# np.array([1, 0, 0, 0, 0, 4])

我可以通过列表理解来解决这个问题:

c = [a[i] if b[i] > 0 else 0 for i in range(len(a))]

我也可以制作一个 mask ,但这需要 2 次迭代:

mask = [1 if b[i] > 0 else 0 for i in range(len(b))]  
c = ma.array(a, mask=mask)

numpy 是否有一些原生的东西允许一个数组对另一个数组充当筛子?

最佳答案

使用np.where :

result = np.where(b > 0, a, 0)
print(result)

或者只是相乘:

import numpy as np

a = np.array([1, 0, 2, 3, 0, 4])
b = np.array([1, 0, 0, 0, 0, 6])

print(a * (b > 0))

输出

[1 0 0 0 0 4]

关于python - 过滤 numpy 数组但保留原始值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58121894/

相关文章:

python - 在gekko中求解方程

python - 通过移动应用程序在 Raspberry Pi 上切换显示 OSMC 的电视

java - 原始数组和引用数组有什么区别。

java - 如何在循环末尾连接数组

python - 对数变换提亮暗区的颜色问题。为什么以及如何解决?

python 索引不改变 numpy 数组

python - Numpy.dot 类型错误 : Cannot cast array data from dtype ('float64' ) to dtype ('S32' ) according to the rule 'safe'

Python 3.5 - 在 Windows 下创建带子文件夹的文件夹

python - pandas:融化具有相同索引的多个列

javascript - 从 firebase 提取数据后从数组中删除元素