如何使用numpy数组的if语句?

时间:2014-04-09 13:04:36

标签: python arrays numpy

我有以下输入文件' r1'

14 14
15 15

我想创建以下输出文件' r2'。

14 14 less than 15
15 15 equal to 15

我正在尝试使用以下代码。

import numpy as np

s=open('r1')
r=open('r2','w+')

r1=np.loadtxt(s)
atim=r1[:,[0]]
alat=r1[:,[1]]

if atim<15 and alat<15:
    print >> r,atim,alat,'less than 15'

if atim==15 and alat==15:
    print >> r,atim,alat,'equal to 15'

但是,当我运行程序时,我收到以下错误    如果atim&lt; 15和alat&lt; 15: ValueError:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()

3 个答案:

答案 0 :(得分:1)

你想进行比较,比如

all(i < 15 for i in r1[0])
all(i == 15 for i in r1[0])

所以你可以这样做:

for row in len(r1):
    if all(i < 15 for i in r1[row]):
        print >> r,r1[row][0], r1[row][1], 'less than 15'
    if all(i == 15 for i in r1[row]):
        print >> r,r1[row][0], r1[row][1], 'equal to 15'

答案 1 :(得分:0)

numpy,非常简单:

[(a < 15).all() for a in r1] 

[(a == 15).all() for a in r1] 

答案 2 :(得分:0)

import numpy as np

r1 = np.array([[11, 15],
               [15, 15],
               [14, 14]])

equal_to_15 = (r1[:,0] == 15) & (r1[:,1] == 15)
less_than_15 = (r1[:,0] < 15) & (r1[:,1] < 15)

结果:

>>> equal_to_15
array([False,  True, False], dtype=bool)
>>> less_than_15
array([False, False,  True], dtype=bool)

错误讯息:

将数组与整数进行比较时,会得到一个布尔数组。

>>> np.array([13, 15]) == 15
array([False,  True], dtype=bool)
>>> if _:
...     print 'Hi'
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

numpy并没有评估整个数组的真实性,但如果我们这样做了:

>>> if (np.array([13, 15]) == 15).any():
...     print 'Hi'
... 
Hi