当我的数组的所有值都大于100时,我的代码应该停止。我使用np.all()来评估条件。看起来条件已满足,但np.all()似乎错误地评估。我错过了什么? OS 10.8.5上的Python 2.7.8。
(Pdb) ratio_J_a
array([ 250.44244741, 186.92848637, 202.67726408, 143.01112845,
132.95878384, 176.49130164, 178.9892571 , 118.07516559,
205.59639112, 183.64142204])
(Pdb) np.all(ratio_J_a) > 100.
False
(Pdb) np.all(ratio_J_a) < 100.
True
答案 0 :(得分:1)
我认为你应该:
In [5]: import numpy as np
In [6]: ratio_J_a = np.array([ 250.44244741, 186.92848637, 202.67726408, 143.01112845,
...: 132.95878384, 176.49130164, 178.9892571 , 118.07516559,
...: 205.59639112, 183.64142204])
In [7]: print(np.all(ratio_J_a > 100.))
True
In [8]: print(np.all(ratio_J_a < 100.))
False
为了以防万一,您实际上想知道为什么会这样:
(Pdb) np.all(ratio_J_a) > 100.
False
(Pdb) np.all(ratio_J_a) < 100.
True
原因是np.all(ratio_J_a)
的计算结果为真,它被视为一个,例如
In [17]: "{}".format(np.all(ratio_J_a))
Out[17]: 'True'
In [18]: "{:d}".format(np.all(ratio_J_a))
Out[18]: '1'
因此,在您的情况下,您实际上是这样做的:
(Pdb) 1 > 100.
False
(Pdb) 1 < 100.
True
答案 1 :(得分:0)
numpy.all
测试沿给定轴的所有数组元素是否都计算为True。
>>> import numpy as np
>>> ratio_J_a = np.array([
... 250.44244741, 186.92848637, 202.67726408, 143.01112845,
... 132.95878384, 176.49130164, 178.9892571 , 118.07516559,
... 205.59639112, 183.64142204
... ])
>>> np.all(ratio_J_a > 100)
True
>>> np.all(ratio_J_a < 100)
False
np.all(ratio_J_a)
被评估为True
,因为非零数字被视为真值。 True
等于1. 1 > 100
为假,1 < 100
为真。