Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I produce a nice output of a numpy matrix?

I currently have the following snippet:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import numpy
from numpy import linalg

A = [[1,2,47,11],[3,2,8,15],[0,0,3,1],[0,0,8,1]]
S = [[113,49,2,283],[-113,0,3,359],[0,5,0,6],[0,20,0,12]]

A = numpy.matrix(A)
S = numpy.matrix(S)

numpy.set_printoptions(precision=2, suppress=True, linewidth=120)
print("S^{-1} * A * S")
print(linalg.inv(S) * A * S)

which produces this output:

python output

Is there a standard way to produce an output similar to the following? How can I get this output?

[[ -1    -0.33  0  0]
 [  0     1     0  0]
 [  0  -648     4  0]
 [  0     6.67  0  5]]

What's different?

  • At least two spaces between the last character of column i and the first character of column i+1, but it might be more if more is needed (NumPy output makes two spaces)
  • the dots are aligned (The are aligned, but the font setting of BetterPythonConsole messes it up)
  • No -0 but 0
  • No 0. but 0

edit: It seems as if the Python Console, which gets started with gEdits BetterPythonConsole plugin does something different than Python, when I start it from terminal.

This is the output as text of the script above

moose@pc07:~/Desktop$ python matrixScript.py 
S^{-1} * A * S
[[  -1.     -0.33    0.     -0.  ]
 [   0.     -1.     -0.      0.  ]
 [   0.   -648.      4.     -0.  ]
 [   0.      6.67    0.      5.  ]]

With prettyprint:

S^{-1} * A * S
matrix([[  -1.  ,   -0.33,    0.  ,   -0.  ],
        [   0.  ,   -1.  ,   -0.  ,    0.  ],
        [   0.  , -648.  ,    4.  ,   -0.  ],
        [   0.  ,    6.67,    0.  ,    5.  ]])

This is defenitely worse, but it was worth a try.

like image 347
Martin Thoma Avatar asked Sep 10 '12 08:09

Martin Thoma


People also ask

How do you print a matrix output in Python?

Use the for Loop to Print the Matrix in Python We use the map function, which converts the whole row to a string, and then we apply the join function to this whole row which converts it all to a single string and separate elements by the separator specified.

How do I print a NumPy full matrix?

We can use the threshold parameter of the numpy. set_printoptions() function to sys. maxsize to print the complete NumPy array.

How do I create a matrix in NumPy?

Code: import numpy as np #creating matrix from array like object B = np. matrix([[1, 2, 3], [4, 5, 6]]) print("Array created using array like object is :\n", B)


1 Answers

If you use numpy 1.8.x you can customize formatting with the formatter parameter. For example, setting:

numpy.set_printoptions(formatter={'float': lambda x: 'float: ' + str(x)})

All floats would be printed like float: 3.0, or float: 12.6666666666.

Unfortunately I still have numpy 1.6.1 installed and this option is not provided, so I'm not able to use it to get your desired output.

like image 108
Bakuriu Avatar answered Oct 18 '22 13:10

Bakuriu