numpy all()评估错误

时间:2014-12-02 01:37:24

标签: python numpy

当我的数组的所有值都大于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

2 个答案:

答案 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为真。