1. ホーム
  2. python

[解決済み] printoptions フォーマッタが複素数の配列の単一要素に対して機能しない

2022-02-19 05:23:25

質問

このフォーマッターは、なぜ complex128 :

import numpy as np
import scipy.sparse as sp

A = sp.diags([1, -2, 1], [1, 0, -1], shape=[3, 3], format='csc')
evals, evecs = sp.linalg.eigs(A, k=1, which='LM')

with np.printoptions(formatter={'complex_kind': '{:.2f}'.format}):
    print (evals, evals[0])

このコードでは、1つの要素のnumpy.ndarrayを表示し、次にその要素を表示しています。フォーマッタは配列に使用され、要素だけには使用されません。

[-3.41+0.00j] (-3.4142135623730954+0j)

関係する種類

type(evals): numpy.ndarray
evals.dtype: dtype('complex128')
type(evals[0]): numpy.complex128

何かヒントがあれば教えてください。

解決方法は?

の設定は numpy.printoptions numpy.set_printoptions NumPyがどのように表示するかを制御します。 配列 . これらは、NumPy のスカラー(例えば、次のようなもの)には影響しません。 numpy.complex128 , numpy.float32 など)が印刷されます。

例えば

In [14]: np.set_printoptions(precision=3)                                       

In [15]: np.array([np.pi])  # A 1-d array.                                                                                          
Out[15]: array([3.142])

In [16]: np.array(np.pi)    # A 0-d array (aka a scalar array)                                                                        
Out[16]: array(3.142)

In [17]: np.float64(np.pi)  # A scalar float64. Output is not controlled by the print options                                       
Out[17]: 3.141592653589793

参照 github issue 11048 (このトピックに関する議論は、NumPy github サイトにある(そしてそこにあるリンクも)。