Python NumPy中的链式比较? >k 数组([[0.58789735,0.29830086], [0.09397728, 0.60737265]]) >>>k[k>>k[k>0.5]=1 >>>k 数组([[1,0.29830086], [1. , 1. ]])
是否可以将k[0.1>k>0.5]=1组合起来,当我尝试这样做时,我会得到以下错误Python NumPy中的链式比较? >k 数组([[0.58789735,0.29830086], [0.09397728, 0.60737265]]) >>>k[k>>k[k>0.5]=1 >>>k 数组([[1,0.29830086], [1. , 1. ]]),python,arrays,numpy,Python,Arrays,Numpy,是否可以将k[0.1>k>0.5]=1组合起来,当我尝试这样做时,我会得到以下错误 >>> k array([[0.58789735, 0.29830086], [0.09397728, 0.60737265]]) >>> k[k<0.1] = 1 >>> k[k>0.5] = 1 >>> k array([[1. , 0.29830086], [1. ,
>>> k
array([[0.58789735, 0.29830086],
[0.09397728, 0.60737265]])
>>> k[k<0.1] = 1
>>> k[k>0.5] = 1
>>> k
array([[1. , 0.29830086],
[1. , 1. ]])
>>k[0.1>k>0.5]=1
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:包含多个元素的数组的真值不明确。请使用a.any()或a.all()
我在这里的选项是什么?我尝试了.any和.all,但它没有我在这里尝试的那样优雅。在numpy中不允许链式比较。您需要将这些条件与链式比较链接,然后执行。在这种情况下,当满足任一条件时,您希望将值设置为
1
,因此需要按位OR(
):
ValueError:包含多个元素的数组的真值不明确。
使用a.any()或a.all()
这里的问题是python在内部将上述功能扩展为:
0.1>k>0.5
这就是导致错误的原因,因为和隐式调用bool
,NumPy
只允许对单个元素(不是大小>1的数组)隐式强制布尔值,因为具有许多值的布尔数组既不计算为True
也不计算为False
。正是由于这种模糊性,这是不允许的,在布尔上下文中计算数组总是会产生ValueError
运行np.where(np.logical_或(k<0.1,0.5
结果是:
0.1>k and k>0.5
0.1>k>0.5
0.1>k and k>0.5
array([[1. , 0.29830086],
[1. , 1. ]])