list_val = [ 30, 120, 240, 510]
num = 900
np.argmax(np.asarray(list_val) > num)
我想找到在阵列的第一元件,其大于num
numpy的argmax不工作
以上从代码的输出为0。然而的位置时,由于900是更大的比510,结果应该是3.我该如何解决它?
--edit
我想如果num为20,200或900
list_val = [ 30, 120, 240, 510]
num = 900
np.argmax(np.asarray(list_val) > num)
我想找到在阵列的第一元件,其大于num
numpy的argmax不工作
以上从代码的输出为0。然而的位置时,由于900是更大的比510,结果应该是3.我该如何解决它?
--edit
我想如果num为20,200或900
In [248]: x = np.array([ 30, 120, 240, 510])
In [249]: x>200
Out[249]: array([False, False, True, True], dtype=bool)
In [250]: np.argmax(_)
Out[250]: 2
In [251]: x>400
Out[251]: array([False, False, False, True], dtype=bool)
In [252]: np.argmax(_)
Out[252]: 3
In [253]: x>600
Out[253]: array([False, False, False, False], dtype=bool)
In [254]: np.argmax(_)
In [255]: np.max(__)
Out[255]: False
随着大的门槛,比较产生所有False
。最大值是False
,第0项是那个。
您可能必须测试所有False
的x>n
,并在此情况下返回不同的值。这不是一个普遍定义的行为。
列表有发现
In [261]: (x>200).tolist().index(True)
Out[261]: 2
In [262]: (x>400).tolist().index(True)
Out[262]: 3
In [263]: (x>600).tolist().index(True)
...
ValueError: True is not in list
的string
find
回报-1
如果找不到值。
In [266]: def foo(test):
...: if not test.any():
...: return -1
...: return np.argmax(test)
...:
In [267]: foo(x>200)
Out[267]: 2
In [268]: foo(x>400)
Out[268]: 3
In [269]: foo(x>600)
Out[269]: -1
说a=np.array([ 30, 120, 240, 510])
一个可行的解决方案。 np.argmax()
会给你3
。您的密码0
是因为np.asarray(list_val) > num
是一个阵列,其条目全部为False
,即没有元素大于num
,因此np.argmax
需要False
为0并且投出0作为argmax
。
如果您想要设置阈值,请尝试np.argmax(a[a<num])
。如果没有达到阈值,这将增加ValueError
而不是0
。
简单'np.argmax(np.asarray(list_val))',我怀疑。否则,我不明白你想达到什么目的? – MariusSiuram
所以我不知道如果num将是900或200或20。是否有解决方案适用于所有情况? – user308827
你可以尝试以更好/详细的方式解释为什么它应该是3? – Divakar