10

現在、次のスニペットがあります。

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

次の出力が生成されます。

パイソン出力

次のような出力を生成する標準的な方法はありますか? この出力を取得するにはどうすればよいですか?

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

何が違うの?

  • icolumn の最後の文字と columnの最初の文字の間に少なくとも 2 つのスペースi+1が必要ですが、さらに必要な場合はそれ以上になる可能性があります (NumPy の出力では 2 つのスペースが作成されます)。
  • ドットが揃っています(ドットは揃ってますが、のフォント設定がBetterPythonConsoleめちゃくちゃです)
  • いや-0しかし0
  • いや0.しかし0

edit : gEdits BetterPythonConsoleプラグインで開始される Python コンソールは、ターミナルから開始すると、Python とは異なる処理を行うように見えます。

これは、上記のスクリプトのテキストとしての出力です

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

プリティプリントを使用:

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

これは間違いなく悪いですが、試してみる価値はありました。

4

1 に答える 1

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 がインストールされており、このオプションが提供されていないため、目的の出力を得るために使用できません。

于 2012-09-10T08:56:44.073 に答える