如何从带有标题的文件中获取整数的ndar?

时间:2016-10-09 03:37:30

标签: python numpy multidimensional-array

我有一个包含以下内容的纯文本文件(.txt)。

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

有人能帮助我吗?

2 个答案:

答案 0 :(得分:1)

一个简单的解决方案是明确忽略您不需要的行:

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

这假设页眉和页脚总是两行,直接给你你想要的东西。

答案 1 :(得分:1)

为避免由于末尾的文本而可能发生的错误,您可以将numpy.genfromtxtmax_rows参数一起使用。例如,

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]])

(我以二进制模式打开文件,以避免{3}在Python 3中出现的字节/ str问题。)