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

2024-10-01 07:36:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下输入文件'r1'

14 14
15 15

我想创建以下输出文件“r2”。在

^{pr2}$

我正在使用下面的代码。在

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<;15和alat<;15: ValueError:具有多个元素的数组的真值不明确。使用a.any()或a.all()


Tags: and文件代码importltnumpyifnp
3条回答
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)

结果:

^{pr2}$

错误消息:

当你比较一个数组和整数时,你得到一个布尔数组。在

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

有了numpy,这很简单:

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

或者

^{pr2}$

你想做一个比较

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

所以你可以:

^{pr2}$

相关问题 更多 >