2012-09-10 71 views
8

我現在有下面的代碼片段:如何生成一個numpy矩陣的不錯輸出?

#!/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) 

產生這樣的輸出:

python output

有沒有產生類似以下的輸出標準的方式?我怎樣才能得到這個輸出?

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

有什麼不同?

  • 至少有兩個i列的最後一個字符和i+1列的第一個字符之間的空間,但如果需要更多的可能是更多(NumPy的輸出,使兩個空格)
  • 點對齊(該排列,但BetterPythonConsole混亂起來)
  • 沒有-00
  • 沒有0.0
  • 字體設置

編輯:看起來好像Python的控制檯,它被開始gEdits BetterPythonConsole插件做的東西比Python不同,當我從終端啓動它。

這是輸出爲腳本的文本上方

[email protected]:~/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. ]] 

隨着prettyprint:

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

這是defenitely糟糕,但它是值得一試。

+0

可能的[numpy.array打印]的副本(http://stackoverflow.com/questions/2891790/pretty-printing-of-numpy-array) – Chris

+2

這不是重複的。我已經閱讀過這個問題(和答案),但它沒有提供足夠的格式。 –

+0

您是否嘗試過'pprint'? http://stackoverflow.com/questions/1523660/how-to-print-a-list-in-python-nicely –

回答

4

如果您使用numpy 1.8.x,則可以使用formatter參數自定義格式。 例如,設置:

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

所有浮子將被印刷像float: 3.0,或float: 12.6666666666

不幸的是,我仍然安裝了numpy 1.6.1,並且沒有提供此選項,因此我無法使用它來獲得所需的輸出。

+0

我也有numpy 1.6.1。 –

+0

我想更新我的系統將是最好的選擇,因爲所有其他的格式化問題似乎都與'BetterPythonConsole'有關。 –

+0

是的,可能另一種選擇是編寫一個自定義'format'函數來與numpy數組一起使用。這可能不會太難寫,但如果您希望將其作爲將來可能使用的一般信息,則不會在2分鐘內寫入。 希望升級會給你這個以外的其他好處。 – Bakuriu