过滤numpy数组,但保留原始值

问题描述 投票:1回答:1

换句话说,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固有的功能,允许一个数组充当另一个数组的筛子?

python arrays numpy
1个回答
2
投票

使用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]
© www.soinside.com 2019 - 2024. All rights reserved.