对于两个numpy数组a,b
a=[1,2,3] b=[4,5,6]
Run Code Online (Sandbox Code Playgroud)
我想将a的x <2.5数据更改为b.所以我试过了
a[a<2.5]=b
Run Code Online (Sandbox Code Playgroud)
希望是的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
Run Code Online (Sandbox Code Playgroud)
问题是什么?
您看到的问题是掩码如何在numpy数组上工作的结果.
当你写作
a[a < 2.5]
Run Code Online (Sandbox Code Playgroud)
你找回a与面具匹配的元素a < 2.5.在这种情况下,这将只是前两个元素.
试图这样做
a[a < 2.5] = b
Run Code Online (Sandbox Code Playgroud)
是一个错误,因为b有三个元素,但a[a < 2.5]只有两个.
在numpy中实现结果的简单方法是使用np.where.
这个的语法是np.where(condition, valuesWhereTrue, valuesWhereFalse).
在你的情况下,你可以写
newArray = np.where(a < 2.5, b, a)
Run Code Online (Sandbox Code Playgroud)
或者,如果您不想要新数组的开销,则可以就地执行替换(正如您在问题中尝试的那样).要实现这一点,您可以写:
idxs = a < 2.5
a[idxs] = b[idxs]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1885 次 |
| 最近记录: |