지정된 열 간격 데이터의 형식, 나는 그냥 파이썬 문자열 조작 도구를 사용하는 것이 가장 쉬운 방법이 될 것이라고 생각
1 0 0 617.09 0.00 9.38 l 0.0000E+00
2 0 0 7169.00 6978.44 94.10 o 0.1913E-05
3 0 0 366.08 371.91 14.06 o 0.6503E-03
4 0 0 5948.04 5586.09 52.95 o 0.2804E-05
5 0 0 3756.34 3944.63 50.69 o 0.6960E-05
-11 1 0 147.27 93.02 23.25 o 0.1320E-02
-10 1 0 -2.31 5.71 9.57 o 0.2533E-02
def to_float(item):
try:
return float(item)
except ValueError:
return item
def formatter(lines):
for line in lines:
if not line.strip(): continue
yield [to_float(item) for item in line.split()]
dct = {}
with open('data') as f:
for row in formatter(f):
dct[tuple(row[:3])] = row[5:7]
print(dct)
이
를 얻을 : 같은
split
파일을 구문 분석
{(-11.0, 1.0, 0.0): [23.25, 'o'], (4.0, 0.0, 0.0): [52.95, 'o'], (1.0, 0.0, 0.0): [9.38, 'l'], (-10.0, 1.0, 0.0): [9.57, 'o'], (3.0, 0.0, 0.0): [14.06, 'o'], (5.0, 0.0, 0.0): [50.69, 'o'], (2.0, 0.0, 0.0): [94.1, 'o']}
원래 답 :
genfromtxt
는 dtype
적절한 추측하려고 None
원인 genfromtxt
로 설정 매개 변수 dtype
있다 :
예를 들어
import numpy as np
arr = np.genfromtxt('data', dtype = None)
dct = {tuple(row[:3]):row[5:7] for row in arr}
,이 같은 data
로를 :
1 2 3 4 5 6 7 8 9 10
1 2 4 4 5 6 7 8 9 10
1 2 5 4 5 6 7 8 9 10
dct
이 명확성을 위해
{(1, 2, 5): array([6, 7]), (1, 2, 4): array([6, 7]), (1, 2, 3): array([6, 7])}
감사합니다. 위와 같이 테스트 데이터를 사용할 때 작동합니다. 던지는 문제는 색인이 유효하지 않다는 것입니다. 내 데이터가 균등하게 간격을 두지 않았고 정수와 부동 소수점이 혼합되어 있고 일부 앞에 음수 기호가 포함되어 있기 때문이라고 생각합니다. 나는 delimiter = None을 사용하여 시도했지만 도움이되지 않습니다. 죄송합니다. 그냥 순진한 사람 일 수도 있습니다. – user1171835
데이터 샘플을 게시하면 다른 접근 방식을 제안 할 수 있습니다. – unutbu
다음은 일부 데이터의 예입니다. http://pastebin.ca/2123461 – user1171835