Extracting matrix from a text file
Colin J. Williams
cjw at ncf.ca
Tue Aug 11 10:45:28 EDT 2009
telekab1 at hotmail.com wrote:
> Hello to all!!
>
> I am new in python, and I am running it on Mac with Smultron editor. I
> need to read a textfile that includes numbers (in a matrix form),
> indexes, and strings, like this:
>
> Marsyas-kea distance matrix for MIREX 2007 Audio Similarity Exchange
> Q/R 1 2 3
> 4 5
> 1 0 4.54592 4.36685
> 5.29463 3.85728
> 2 4.54592 0 3.97667
> 5.02151 4.64284
> 3 4.36685 3.97667 0
> 4.98743 4.83683
> 4 5.29463 5.02151 4.98743
> 0 6.04393
> 5 3.85728 4.64284 4.83683 6.04393 0
>
> My code to get this information is:
>
> matrix = open("dmatrix_5.txt");
>
> while 1:
> mat = matrix.readline()
> if not mat:
> break
> pass # do something
> print mat
>
>
>
> So I just want to keep the matrix in the "middle" for math
> computations.
>
> 0 4.54592 4.36685
> 5.29463 3.85728
> 4.54592 0 3.97667
> 5.02151 4.64284
> 4.36685 3.97667 0
> 4.98743 4.83683
> 5.29463 5.02151 4.98743
> 0 6.04393
> 3.85728 4.64284 4.83683 6.04393 0
>
>
> I've seen and tried a lot of ways, like split or isinstance.. but
> never get the wanted result.... does anyone have an idea, or hint?
> Thank you once more for your help!
>
> Best Regards,
> Bea
numpy provides an answer. See the little script below:
import numpy as _n
import string as _s
a= "0 4.54592 4.36685 5.29463 3.85728 " + \
"4.54592 0 3.97667 5.02151 4.64284 " + \
'4.36685 3.97667 0 4.98743 4.83683 ' + \
'5.29463 5.02151 4.98743 0 6.04393 ' + \
'3.85728 4.64284 4.83683 6.04393 0'
d= _n.mat(_n.reshape(_n.array(a.split(), dtype= _n.float), (5, 5)))
print repr(d)
print 'Default printoptions:', _n.get_printoptions()
for p in range(9):
_n.set_printoptions(precision= p)
print 'precision= ', p, '\n', d
When you run this, you'll see that there is a numpy glitch for precisions > 5.
Colin W.
More information about the Python-list
mailing list