2016-10-09 1 views
2

다음 내용이 포함 된 일반 텍스트 파일 (.txt)이 있습니다.헤더가있는 파일에서 정수의 numpy ndarray를 얻는 방법은 무엇입니까?

Matrix Header. 
6 11 
0 1 1 1 1 1 1 1 1 1 1 
1 0 1 1 1 1 0 1 1 1 1 
1 1 1 1 0 0 1 1 1 1 1 
0 0 0 0 1 1 1 0 0 0 0 
1 1 1 0 0 1 1 1 1 1 1 
1 0 0 1 1 1 1 0 1 1 0 

6 rows, 11 columns 

나는 다음과 같이 정수의 NumPy와 ndarray를 얻을 필요

[[0 1 1 1 1 1 1 1 1 1 1] 
[1 0 1 1 1 1 0 1 1 1 1] 
[1 1 1 1 0 0 1 1 1 1 1] 
[0 0 0 0 1 1 1 0 0 0 0] 
[1 1 1 0 0 1 1 1 1 1 1] 
[1 0 0 1 1 1 1 0 1 1 0]] 

나는 다음과 같은 전략

import pandas 
import numpy 
data = pandas.read_table(path, skiprows= 2) 
data = data.values 
print(data) 

을 시도하지만 결과 ndarray가 올바른 형식이 아닙니다.

[['0 1 1 1 1 1 1 1 1 1 1 '] 
['1 0 1 1 1 1 0 1 1 1 1 '] 
['1 1 1 1 0 0 1 1 1 1 1 '] 
['0 0 0 0 1 1 1 0 0 0 0 '] 
['1 1 1 0 0 1 1 1 1 1 1 '] 
['1 0 0 1 1 1 1 0 1 1 0 ']] 

아무도 도와 줄 수 있습니까?

+0

((나는 genfromtxt 파이썬 3에서 가지고있는 바이트/STR 문제를 방지하기 위해 바이너리 모드로 파일을 연))'. 직접'numpy.load_txt()'를 사용할 수도 있습니다. – Julien

+0

입력 파일에 실제로 하단에 '6 행 11 열'이라는 텍스트가 포함되어 있습니까? –

+0

잘 작동합니다. 감사합니다. @JulienBernu. 보다 우아하고 효율적인 구현에 대한 제안이 있습니까? – HarpMan

답변

1

끝에있는 텍스트 때문에 발생할 수있는 오류를 방지하려면 max_rows 인수와 함께 numpy.genfromtxt을 사용할 수 있습니다. 예를 들어,

In [26]: with open(filename, 'rb') as f: 
    ...:  f.readline() # skip the header 
    ...:  nrows, ncols = [int(field) for field in f.readline().split()] 
    ...:  data = np.genfromtxt(f, dtype=int, max_rows=nrows) 
    ...:  

In [27]: data 
Out[27]: 
array([[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 
     [1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1], 
     [1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1], 
     [0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0], 
     [1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1], 
     [1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0]]) 

당신은 read_table`에서` '`9월 ='사용할 필요가

+0

감사합니다. 우수한 솔루션. – HarpMan

1

간단한 해결책은 명시 적으로 필요하지 않은 라인을 무시하는 것입니다 :이 직접 머리글과 바닥 글은 항상 두 개의 라인을 각각 가정, 당신이 원하는 당신을 제공

with open(path) as infile: 
    lines = infile.readlines() 
np.loadtxt(lines[2:-2]) 
del lines # if you want to immediately release the memory 

.

+0

감사합니다. John, 잘 작동합니다. – HarpMan

관련 문제