如何从给定文件中读取矩阵?

Rah*_*hul 13 python file-io

我有一个文本文件,其中包含N*M维度的矩阵.

例如,input.txt文件包含以下内容:

0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0
0,0,2,1,0,2,0,0,0,0
0,0,2,1,1,2,2,0,0,1
0,0,1,2,2,1,1,0,0,2
1,0,1,1,1,2,1,0,2,1
Run Code Online (Sandbox Code Playgroud)

我需要编写python脚本,我可以在其中导入矩阵.

我目前的python脚本是:

f = open ( 'input.txt' , 'r')
l = []
l = [ line.split() for line in f]
print l
Run Code Online (Sandbox Code Playgroud)

输出列表是这样的

[['0,0,0,0,0,0,0,0,0,0'], ['0,0,0,0,0,0,0,0,0,0'], ['0,0,0,0,0,0,0,0,0,0'],
 ['0,0,0,0,0,0,0,0,0,0'], ['0,0,0,0,0,0,0,0,0,0'], ['0,0,0,0,0,0,0,0,0,0'],
 ['0,0,2,1,0,2,0,0,0,0'], ['0,0,2,1,1,2,2,0,0,1'], ['0,0,1,2,2,1,1,0,0,2'],
 ['1,0,1,1,1,2,1,0,2,1']]
Run Code Online (Sandbox Code Playgroud)

我需要以int形式获取值.如果我尝试输入强制转换,则会抛出错误.

MGw*_*nne 27

考虑

with open('input.txt', 'r') as f:
    l = [[int(num) for num in line.split(',')] for line in f]
print(l)
Run Code Online (Sandbox Code Playgroud)

产生

[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 2, 1, 0, 2, 0, 0, 0, 0], [0, 0, 2, 1, 1, 2, 2, 0, 0, 1], [0, 0, 1, 2, 2, 1, 1, 0, 0, 2], [1, 0, 1, 1, 1, 2, 1, 0, 2, 1]]
Run Code Online (Sandbox Code Playgroud)

请注意,您必须在逗号上拆分.


如果你有空行然后改变

l = [[int(num) for num in line.split(',')] for line in f ]
Run Code Online (Sandbox Code Playgroud)

l = [[int(num) for num in line.split(',')] for line in f if line.strip() != "" ]
Run Code Online (Sandbox Code Playgroud)


Fel*_*man 13

你可以简单地使用numpy.loadtxt.易于使用,您还可以指定分隔符,数据类型等.

具体来说,你需要做的就是:

import numpy as np
input = np.loadtxt("input.txt", dtype='i', delimiter=',')
print(input)
Run Code Online (Sandbox Code Playgroud)

输出将是:

[[0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0]
 [0 0 2 1 0 2 0 0 0 0]
 [0 0 2 1 1 2 2 0 0 1]
 [0 0 1 2 2 1 1 0 0 2]
 [1 0 1 1 1 2 1 0 2 1]]
Run Code Online (Sandbox Code Playgroud)