我想返回python numpy数组中两个值之间的所有值的索引.这是我的代码:
inEllipseIndFar = np.argwhere(excessPathLen * 2 < ePL < excessPathLen * 3)
但它返回一个错误:
inEllipseIndFar = np.argwhere((excessPathLen * 2 < ePL < excessPathLen * 3).all())
ValueError: The truth value of an array with more than one element is ambiguous. Use
a.any() or a.all()
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种方法可以在不迭代数组的情况下执行此操作.谢谢!
Hoo*_*ked 14
由于> < =返回蒙版数组,您可以将它们相乘以获得您正在寻找的效果(基本上是逻辑AND):
>>> import numpy as np
>>> A = 2*np.arange(10)
array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
>>> idx = (A>2)*(A<8)
>>> np.where(idx)
array([2, 3])
Run Code Online (Sandbox Code Playgroud)
您可以使用括号和正确的操作组合多个布尔表达式:
In [1]: import numpy as np
In [2]: A = 2*np.arange(10)
In [3]: np.where((A > 2) & (A < 8))
Out[3]: (array([2, 3]),)
Run Code Online (Sandbox Code Playgroud)
您还可以将结果设置np.where为变量以提取值:
In [4]: idx = np.where((A > 2) & (A < 8))
In [5]: A[idx]
Out[5]: array([4, 6])
Run Code Online (Sandbox Code Playgroud)