对于两个numpy数组a,b
a=[1,2,3] b=[4,5,6]
我想把a的x<2.5数据改成b。所以我尝试了
a[a<2.5]=b
希望 a 为 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
问题是什么?
最佳答案
您看到的问题是掩码如何作用于 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]
关于numpy 改变元素匹配条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25103731/