从文件中读取2D矩阵

时间:2018-04-23 18:02:46

标签: python file io

我制作了一个txt文件,其中包含我的二维矩阵的条目N x N,按以下方式排序:

row column
1    1
1    2
1    3
.
.
.
1    N
2    1
2    2
.
.
.
2    N
.
.
.
N    1
N    2 
.
.
.
N    N

其中数字代表行(左)和列(右)的索引,从1到N

我想用Python阅读这篇文章,这样我就可以将我的矩阵存储为列表列表,就像你使用np.loadtxt得到的那样,但是,我不能轻易地在这里使用(或者至少我不知道怎么样)

编辑:

我的文件txt的简化版,row, column, valueN=5(从0开始计算)

0 0 0.3
0 1 0.4
0 2 0.2
0 3 0.3
0 4 0.7
1 0 9.3
1 1 3.5
1 2 2.4
1 3 3.1
1 4 3.4
2 0 2.3
2 1 4.5
2 2 7.8
2 3 9.2
2 4 8.1
3 0 7.2
3 1 3.2
3 2 8.2 
3 3 7.2 
3 4 7,4
4 0 0.2
4 1 8.2
4 2 9.2
4 3 0.2 
4 4 0.2 

2 个答案:

答案 0 :(得分:1)

蛮力方法:

table = []
row_values = []
last_row = ''
for line in f:
    row, col, value = line.split()
    if row != last_row:
        last_row = row
        row_values = []
        table.append(row_values)
    row_values.append(float(value))

一个更聪明的方法,它获取所有值,然后将它们切成行:

row_numbers, column_numbers, values = zip(*(line.split() for line in f))
rows = int(max(row_numbers)) + 1
columns = int(max(column_numbers)) + 1
values = [float(v) for v in values]
data = [values[n:] for n in range(0, len(values), columns)]
assert len(data) == rows

答案 1 :(得分:0)

我认为最好的方法是使用np.reshape

import numpy as np
a = np.loadtxt('file.txt')
third_column = a[:, 2]

new_matrix = third_column.reshape((dimension_x, dimension_y))

应该知道dimension_xdimension_y