numpy数组过滤两次并替换

时间:2013-12-13 15:16:33

标签: python arrays numpy filtering slice

我想在一个大型数组上执行两个过滤和一个替换步骤但是我无法想办法有效地执行它而不进行一些复制或循环。

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

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

我通过选择b低于6的元素来应用第一次掩蔽:

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 ]

它有效。没有制作二级阵列的任何酷切片方式吗? 感谢。

1 个答案:

答案 0 :(得分:1)

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