对于两个 numpy 数组 a, b
a=[1,2,3] b=[4,5,6]
我想将a的x
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
问题是什么?
您看到的问题是掩码在 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]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)