2012-04-04 44 views
1

複雑な浮動小数点行列が本当に実数または虚数のどちらかで満たされているのは、よくある状況です。時にはそれらも整数である(しかし、中間の数はそうではありません。そして、とにかく複雑な整数型はありません)。おそらく、すべて手作業でフォーマットすることなく、スマートなソリューションがありますか?複雑な配列のスマートプリント

例:(必要とされているものにできるだけ近い)の組み合わせ

numpy.around(numpy.real_if_close(numpy.array([[1.0j,1.0],[0.0,1.0j]],complex))) 

私は

array([[ 0.+1.j, -1.+0.j], 
     [ 0.+0.j, 0.+1.j]]) 

所望の出力を得るには、私はないです

array([[ 1j, -1 ], 
     [ 0 , 1j]]) 
+3

なぜない、あなただけのサブクラスnumpy.arrayと組み込み__repr__関数をオーバーライドしますか? –

+0

@Joel Cornett私はあなたの提案を理解しているか分からない。これが 'repr'関数か単に外部関数かどうかは私には関係ありません。この問題は、この印刷中のゼロのトリッキーな抑制です。その背後にある論理は明白ですが、かなり言い方です。 – Misha

答えて

3
>>> import numpy 
>>> a = numpy.around(numpy.real_if_close(numpy.array([[1.0j,0.0],[0.0,1.0j]],complex))) 
>>> a 
array([[ 0.+1.j, 0.+0.j], 
     [ 0.+0.j, 0.+1.j]]) 
>>> [[c if c.imag else c.real for c in b] for b in a] 
[[1j, 0.0], [0.0, 1j]] 

あるとそれを行うための方法で構築されていることを確認します。

編集:numpyの配列をサブクラス化することをお勧めします。これは、最も簡単な方法です。そうでなければあなただけの配列からすべてを取得し、リストに入れて、しかし、あなたが望むようにそれが0を印刷していないキャストすることができ、それ(それが印刷さ0J)

>>> [[c for c in b] for b in a] 
[[1j, 0j], [0j, 1j]] 
+0

行列[[1.j、1.。]、[0.、1.j]を印刷しようとすると[[1j、(1 + 0j)]、[0,1j]]が得られます。これは負の要素では機能しません。ただし、印刷機能自体のスマート性を利用することをお勧めします。 – Misha

+0

これはネガティブに問題があることに気がつきました。私はこのソリューションが必要なものに対して機能すると信じていますか? –

関連する問題