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

4
这个问题可能看起来很基础,但它引发了一大堆混乱。
我试图将一个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。


你能解释一下你所说的将数组与标量进行比较是什么意思吗? - juanchopanza
a 是数组,而 0. 则是标量或浮点数。 - ilciavo
3个回答

13

这是因为a.any返回True(如果其中一个元素满足条件则返回True,否则返回False)。而在Python中,True和1是相同的对象(True==1),因此Python会将您的条件解释为1<0,这是False!

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

相反,你需要使用 (a<0).any()

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

4
这是a.any()的作用:
返回True,如果a中的任意元素为True。
你在两个样例中都将True与0进行比较。
>>> print a.any()
True
>>> print True < 0.
False

要获取a中的负数,使用a[a < 0.]:
>>> print a[a < 0.]
[-1., -4.]

如果有疑问,可以使用内置的help


@ilciavo 这是一个返回布尔值的函数调用。如果有任何强制转换,那么它将强制转换数组的各个元素为布尔类型。 - juanchopanza
这就是我的意思,它将数组的值转换为布尔值,并检查其中任何一个布尔值是否为True。 - ilciavo

-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())

即使您可以使用any来检查数组是否存在,但是any的主要用途完全不同。您可能需要阅读文档 - hitzg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接