numpy改变元素匹配条件

时间:2014-08-03 10:22:40

标签: numpy

对于两个numpy数组a,b

a=[1,2,3]      b=[4,5,6]

我想将a的x< 2.5数据更改为b。所以我试过

a[a<2.5]=b

希望成为a=[4,5,3]。 但这会导致错误

Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    a[a<2.5]=b
ValueError: NumPy boolean array indexing assignment cannot assign 3 input values to the 2 output values where the mask is true

问题是什么?

1 个答案:

答案 0 :(得分:6)

您看到的问题是掩码如何在numpy数组上运行的结果。

写作时

a[a < 2.5]

你会找回与a匹配的a < 2.5元素。在这种情况下,这将只是前两个元素。

尝试

a[a < 2.5] = b

是一个错误,因为b有三个元素,但a[a < 2.5]只有两个元素。


实现numpy之后的结果的一种简单方法是使用np.where

这个语法是np.where(condition, valuesWhereTrue, valuesWhereFalse)

在你的情况下,你可以写

newArray = np.where(a < 2.5, b, a)

或者,如果您不想要新阵列的开销,您可以就地执行替换(正如您在问题中尝试做的那样)。为此,您可以写:

idxs = a < 2.5
a[idxs] = b[idxs]