NumPy数组过滤两次并替换

3

我希望在一个较大的数组上执行两个过滤和一个替换步骤,但我无法找到一种有效的方法来做到这一点,而不需要进行一些复制或循环。

例如,想象一下大小不同的两个numpy数组。我想应用两个过滤器。第一个是选择小于6的b元素(b'),第二个是将b'的值替换为a的值,如果a小于b'的值:

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

我会先通过选择小于6的b元素进行第一次掩码处理:

m = b < 6 

现在,我想把b[m]的值替换为a和b[m]之间的最小值,期望结果在b中:

[ 0,1,2,2,2,2,6,7,8,9]

使用:

n = a < b[m]
b[m][n] = a[n]

不起作用。可能是由于某些中间数组导致的。

c = np.array( [ 0, 1, 2, 3, 4, 5  ] )

我可以直接执行:

c[ a < c ] = a [ a < c ]

它能正常运行。有没有更酷的切片方式可以在不生成第二个数组的情况下完成呢?谢谢。


这里可能会用到numpy.where(),可能需要嵌套使用... - MattDMo
我刚找到了一种方法:b [ b[b < 6] > a ] = a [ b[ b < 6 ] > a ],但这并不是很优雅。有更好的想法吗? - user3099854
1个回答

1
m = b < 6 
b[m] = np.where(b[m]< a,b[m],a)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接