如何将numpy数组与标量进行比较?

时间:2015-06-18 21:54:26

标签: python arrays numpy

这个问题可能看起来非常基本,但却产生了很大的混乱。

我尝试将numpy.array与标量进行比较:

a=numpy.array([0.,1.,2.,-1.,-4.])
if a.any()>0.:
    print 'a:',a

正如所料,我们得到:

a: [ 0.  1.  2. -1. -4.]

现在,如果我这样做以找到负值

a=numpy.array([0.,1.,2.,-1.,-4.])
if a.any()<0.:
    print 'a:',a

我没有得到任何意味着所有值都大于0的内容。

3 个答案:

答案 0 :(得分:7)

因为a.any返回True(如果你的一个元素满足条件则返回true,否则返回False)。由于True和1是Python中的相同对象(True == 1),因此Python的条件被解释为1<0,这是假的!

>>> True<0
False
>>> a.any()<0.
False

而不是你需要(a<0).any()

>>> (a<0).any()
True

答案 1 :(得分:4)

这是a.any()的作用:

  

如果a的任何元素评估为True,则返回True。

您正在比较两个样本中的True0

>>> print a.any()
True
>>> print True < 0.
False

要在a中使用a[a < 0.]获取负值:

>>> print a[a < 0.]
[-1., -4.]

如有疑问,请使用内置help

答案 2 :(得分:-2)

来自nd.array的方法.any()用于检查数组是否存在。然后你可以试试这个:

import numpy
a=numpy.array([0.,1.,2.,-1.,-4.])
if a.any()>0.:
    print ('a:',a)

print ('After the first if')

if a[a<0].any()<0.: # This don't work
    print ('a:',a)

print ('After the second if')

if a[a<0].any(): # This is working
    print ('a:',a)

# more tests
print('This is True if a exist', a.any())
print('This is True if exist list with positive elements of a',a[a>0].any())
c = numpy.array([0.,1.,2.])
b = numpy.array([])
print ("The array don't exist ", b.any())
print("The array of elements negative of c don't exist ", c[c<0].any())