Python 如何使用带有numpy数组的if语句?
我有以下输入文件“r1”Python 如何使用带有numpy数组的if语句?,python,arrays,numpy,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,ati
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'
将numpy导入为np
s=打开('r1')
r=开放('r2','w+'))
r1=np.loadtxt(s)
atim=r1[:,[0]]
alat=r1[:,[1]]
如果atim r,atim,alat,'小于15'
如果atim==15且alat==15:
打印>>r、atim、alat,“等于15”
但是,当我运行程序时,我得到以下错误
如果atim您想进行如下比较
all(i < 15 for i in r1[0])
all(i == 15 for i in r1[0])
all(r1[0]中的i小于15)
全部(对于r1[0]中的i,i==15)
所以你可以做:
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'
对于len(r1)中的行:
如果全部(r1[行]中的i小于15):
打印>>r,r1[行][0],r1[行][1],“小于15”
如果全部(对于r1[行]中的i,i==15):
打印>>r,r1[行][0],r1[行][1],“等于15”
使用numpy,它非常简单:
[(a < 15).all() for a in r1]
错误消息:
当您将数组与整数进行比较时,会得到一个布尔数组
>>> 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()
这是一个很好的错误消息,你有没有尝试跟进你得到的建议?
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()
>>> if (np.array([13, 15]) == 15).any():
... print 'Hi'
...
Hi