换句话说,numpy是否支持“筛分”?
我有两个数组:
a = np.array([1, 0, 2, 3, 0, 4])
b = np.array([1, 0, 0, 0, 0, 6])
我想要返回一个新数组c
,该数组包含基于a
的掩码的b
的原始值:
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))]
我也可以做一个遮罩,但这需要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]