1. ホーム
  2. python

numpyの配列でfloatをフォーマットする [重複].

2023-10-22 16:44:42

質問

こんな感じでnumpyの配列があれば。

[2.15295647e+01, 8.12531501e+00, 3.97113829e+00, 1.00777250e+01]

小数点以下の数字を移動して、このようなnumpyの配列になるようにフォーマットするにはどうしたらよいでしょうか。

[21.53, 8.13, 3.97, 10.08]

np.around(a, decimals=2)[2.15300000e+01, 8.13000000e+00, 3.97000000e+00, 1.00800000e+01] を出すだけで、他の方法は見つかっていません。

どのように解決するのですか?

numpyを作成するために を表示します。 float 配列を任意のフォーマットで表示するために、 float 値を入力として受け取り、フォーマットされた文字列を返すカスタム関数を定義することができます。

In [1]: float_formatter = "{:.2f}".format

f は固定小数点形式(「科学的」ではない)を意味します。 .2 は小数点以下2桁を意味します (文字列の書式については はここで ).

float値でテストしてみましょう。

In [2]: float_formatter(1.234567E3)
Out[2]: '1234.57'

numpyがすべてのfloat配列をこのように表示するようにするためには formatter= 引数を np.set_printoptions :

In [3]: np.set_printoptions(formatter={'float_kind':float_formatter})

これでnumpyは全てのfloat配列をこのように表示します。

In [4]: np.random.randn(5) * 10
Out[4]: array([5.25, 3.91, 0.04, -1.53, 6.68]

これはnumpyの配列にのみ影響し、スカラーには影響しないことに注意してください。

In [5]: np.pi
Out[5]: 3.141592653589793

また、float 以外や複素数float などには影響しません。他のスカラー型のために別のフォーマッタを定義する必要があります。

また、この だけです。 は、numpyがfloat値を表示する方法に影響します。計算で使用される実際の値は、元の精度を保持します。

例えば

In [6]: a = np.array([1E-9])

In [7]: a
Out[7]: array([0.00])

In [8]: a == 0
Out[8]: array([False], dtype=bool)

numpyプリント a と同じであるかのように 0 と等しいかのように見えますが、そうではありません。 1E-9 .

もし実際に配列の値を計算でどのように使われるかに影響を与えるような方法で丸めたいのであれば np.round を使うべきです。