2014-04-09 3 views
0

나는 다음과 같은 입력 파일이 '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 < 15 ALAT < 15 경우 : 에 ValueError : 두 개 이상의 요소를 배열의 진리 값이 모호합니다. 당신은 그래서 당신이 할 수있는

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

같은 비교를 수행 할 a.any() 또는 a.all()

+1

, 당신은 당신이 거기에 도착 제안에 후속 시도 했습니까? – unwind

답변

1

을 사용 NumPy와와

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

, 꽤 쉽게 :

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

또는

[(a == 15).all() for a in r1] 
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와는 truthness의 전체 배열을 평가하지 않습니다,하지만 우리는 한 경우 : 꽤 좋은 오류 메시지의

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