如何从带有头文件的文件中获得整数的numpy数组



我有一个纯文本文件(.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数组的整数,如下所示:

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

但是结果的narray格式不正确。

[['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 ']]
有人能帮我吗?

为了避免由于末尾的文本而可能发生的错误,您可以使用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]])

(我以二进制模式打开文件以避免genfromtxt在Python 3中存在的字节/str问题。)

一个简单的解决方案是显式忽略不需要的行:

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

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

相关内容

  • 没有找到相关文章

最新更新