Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to to read a matrix from a given file?

Tags:

python

file-io

I have a text file which contains matrix of N * M dimensions.

For example the input.txt file contains the following:

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

I need to write python script where in I can import the matrix.

My current python script is:

f = open ( 'input.txt' , 'r')
l = []
l = [ line.split() for line in f]
print l

the output list comes like this

[['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']]

I need to fetch the values in int form . If I try to type cast, it throws errors.

like image 458
Rahul Avatar asked Oct 01 '11 07:10

Rahul


People also ask

How do you read a matrix?

The dimensions of a matrix are the number of rows by the number of columns. If a matrix has a rows and b columns, it is an a×b matrix. For example, the first matrix shown below is a 2×2 matrix; the second one is a 1×4 matrix; and the third one is a 3×3 matrix.


2 Answers

Consider

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

produces

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

Note that you have to split on commas.


If you do have blank lines then change

l = [[int(num) for num in line.split(',')] for line in f ]

to

l = [[int(num) for num in line.split(',')] for line in f if line.strip() != "" ]
like image 76
MGwynne Avatar answered Oct 08 '22 14:10

MGwynne


You can simply use numpy.loadtxt. Easy to use, and you can also specify your delimiter, datatypes etc.

specifically, all you need to do is this:

import numpy as np
input = np.loadtxt("input.txt", dtype='i', delimiter=',')
print(input)

And the output would be:

[[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]]
like image 45
Feldman Avatar answered Oct 08 '22 14:10

Feldman