这个问题可能看起来非常基本,但却产生了很大的混乱。
我尝试将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的内容。
答案 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。
您正在比较两个样本中的True
到0
。
>>> 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())