使用numpy读取不等列数的数据文件

时间:2018-10-11 21:57:54

标签: python arrays python-2.7 numpy

我有一个带数字的.dat文件。在第一行中,此文件有五列,在随后的所有行中,它都有四列。我希望能够使用numpy读取此文件。我目前尝试读取此文件时遇到以下错误:

vue inspect

如何使用python读取文件的所有行(第一行除外)? 我已附上示例文件here

此外,此文件的第一列(减去第一行)的行数为n ^ 2(在示例中,我有n = 3,并且该列的条目为1,2,3,4,5, 6,7,8,9)。我想阅读第一列(减去第一行)并将其保存为文本文件,其形状为(n,n)(即文本文件应具有n行和n列)。也就是说,我希望保存的矩阵具有以下顺序的条目:

In [3]: F1 = np.loadtxt(‘file.dat')
---------------------------------------------------------------------------
ValueError                                Traceback (most recent 
call last)
<ipython-input-3-c0f31adaf29a> in <module>()
----> 1 F1 = np.loadtxt(‘file.dat')

/Users/usr/anaconda2/lib/python2.7/site-packages/numpy/lib/npyio.pyc in loadtxt(fname, dtype, comments, delimiter, converters, skiprows, usecols, unpack, ndmin, encoding)
   1090         # converting the data
   1091         X = None
-> 1092         for x in read_data(_loadtxt_chunksize):
   1093             if X is None:
   1094                 X = np.array(x, dtype)

/Users/usr/anaconda2/lib/python2.7/site-packages/numpy/lib/npyio.pyc in read_data(chunk_size)
   1014                 line_num = i + skiprows + 1
   1015                 raise ValueError("Wrong number of columns at line %d"
-> 1016                                  % line_num)
   1017 
   1018             # Convert each value according to its column and store

ValueError: Wrong number of columns at line 2 

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

要做的一些实验:(未优化) 1.阅读文件中的行:

编辑:'file.dat'文件具有空行。 if line.strip()...子句用于处理空行。

with open('file.dat', 'r') as fhand:
    file_lines = [line[:-1] for line in fhand if line.strip() != ''] # remove the last character '\n'. **Remove empty lines**.

如果您不喜欢第一行,请将其删除。

file_lines.pop(0)

现在剩余的行具有相同数量的数字条目列,您可以在每行中拆分条目,并进行类型转换:

mat_raw = [[float(term) for term in line.split()] for line in file_lines]

然后您将获得一个浮点矩阵。为了方便切片,将其转换为numpy数组。

mat = numpy.array(mat_raw)
# then you can do whatever you like. eg: first column
first_col = mat[:, 0]
# reshape it to n by n matrix:
res = first_col.reshape((n, n))
...

根据文件格式和目标,可以优化此代码以供自己使用。