2014-06-16 9 views
0

거대한 csv 파일에서 특정 값을 찾는이 코드가 있습니다. 이 값은 "row [2]"로 표시된 파일의 2 열의 경우 223.2516이고 "3 행"으로 표시된 3 열의 경우 58.053입니다. 내가 설정 한 한계 내에서 그 값에 가까운 것을 찾을 수 있도록 코드를 설정했습니다. 223.2516 값이 파일에 존재하지 않는다는 것을 알고 있으므로 코드에서 볼 수있는 것처럼 비교적 가까운 모든 것을 찾고 있습니다.값과 함께 행 번호 출력

In [54]: [row[2] for row in data if abs(row[2]-223.25)<0.001] 
Out[54]: 
[223.24945646, 
223.25013049, 
223.25093125999999, 
223.24943973000001, 
223.24924296, 
223.24958522] 

In [55]: [row[3] for row in data if abs(row[3]-58.053)<0.001] 
Out[55]: 
[58.052124569999997, 
58.052942659999999, 
58.053108100000003, 
58.053536250000001, 
58.05346918, 
58.053109259999999, 
58.052188620000003, 
58.052528559999999, 
58.053201559999998, 
58.052009560000002, 
58.052036010000002, 
58.053623790000003, 
58.052450120000003, 
58.052405720000003, 
58.053431590000002, 
58.053709660000003, 
58.053117569999998, 
58.052511709999997] 

내가 가진 문제는 내가 같은 행 내에 있도록 두 값을 필요로한다는 것입니다 : 마지막 두 명령은 모든 값의 출력을 제공합니다. 나는 서로 독립적 인 가치를 찾고 있지 않다. 223 값과 58.0 값은 모두 같은 행에 있어야하며 좌표가 동일해야합니다. 같은 행에 있거나 최소한 값을 출력하는 방법이 있습니까? 값과 함께 각 값이 들어있는 행 번호를 출력 하시겠습니까? 내 코드는 다음과 같습니다.

import numpy 
from matplotlib import * 
from pylab import * 

data = np.genfromtxt('result.csv',delimiter=',',skip_header=1, dtype=float) 

[row[2] for row in data if abs(row[2]-223.25)<0.001] 
[row[3] for row in data if abs(row[3]-58.053)<0.001] 
+0

[중복 검색] (http://stackoverflow.com/questions/6967463/iterating-over-a-numpy-array) – BeetDemGuise

답변

1

질문에 익숙합니다. 열거 형을 사용하십시오. 예를 들면 다음과 같습니다.

data = [[3, 222], [8, 223], [1,224], [5, 223]] 
A = [ [ind,row[0],row[1]] for ind,row in enumerate(data) if abs(row[1]-223)<1 ] 

print A 

[[1, 8, 223], [3, 5, 223]] 

이렇게하면 색인이 생성되고 원하는 값 쌍을 얻을 수 있습니다.

아이디어를 취하여 예제로 다시 변환하십시오. 그래서 뭔가가 :

[ [ind, row] for ind,row in enumerate(data) if abs(row[2]-223.25)<0.001] 
0

@ 브라크 모스가 있습니다. 좀더 명확하게 말하자면, enumerate은 iterate iterate를 통해 iterator의 암시 적 인덱스를 추적 할 수있게합니다.

phrase = 'green eggs and spam': 
for ii, word in enumerate(phrase.split()): 
    print "Word %d is %s" % (ii, word)