来自文本文件的矩阵输入(python 3)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了来自文本文件的矩阵输入(python 3)相关的知识,希望对你有一定的参考价值。

我试图找到一种能够从文本文件输入矩阵的方法;

例如,文本文件将包含

1 2 3
4 5 6
7 8 9

并且它将使用这些数字制作矩阵并将其放入矩阵= [[1,2,3],[4,5,6],[7,8,9]]

然后这必须与我打印矩阵的方式兼容:

 print('
'.join([' '.join(map(str, row)) for row in matrix]))

到目前为止,我试过这个

path = input('输入文件的路径')

        path = input('enter file location') 

        f = open ( path , 'r')
        matrix = [ map(int,line.split(','))) for line in f if line.strip() != "" ]

它只是返回一个地图对象,当我尝试打印矩阵时返回一个错误。

我究竟做错了什么? Matrix应包含从文本文件中读取的矩阵而不是map对象,我不想使用numpy等外部库

谢谢

答案

你可以使用list comprehension:

myfile.txt

1 2 3
4 5 6
7 8 9


>>> matrix = open('myfile.txt').read()
>>> matrix = [item.split() for item in matrix.split('
')[:-1]]
>>> matrix
[['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9']]
>>> 

您还可以为此创建一个函数:

>>> def matrix(file):
...     contents = open(file).read()
...     return [item.split() for item in contents.split('
')[:-1]]
... 
>>> matrix('myfile.txt')
[['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9']]
>>> 
另一答案

numpy.genfromtxt()所述:

import StringIO, numpy
data = "1 2 3
4 5 6
7 8 9"
numpy.genfromtxt(StringIO.StringIO(data), delimiter = ' ')

> array([[ 1.,  2.,  3.],                                                  
       [ 4.,  5.,  6.],                                                  
       [ 7.,  8.,  9.]])

拿两个:

[list(map(int, line.split(' '))) for line in data.split('
')]
> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
另一答案

正在使用python2(例如Python 2.7.10)和python3(例如Python 3.6.4)

rows=3
cols=3
with open('in.txt') as f:
   data = []
   for i in range(0, rows):
      data.append(list(map(int, f.readline().split()[:cols])))
print (data)

以上是关于来自文本文件的矩阵输入(python 3)的主要内容,如果未能解决你的问题,请参考以下文章

Python代码阅读(第41篇):矩阵转置

来自输入文本文件的 Min Max 和 Avg

python 来自puddletag的代码片段

python中怎样将列表转成矩阵

使用np.array的Python中的矩阵和数组

firebase 的短信代码不匹配