1. ホーム
  2. パイソン

[解決済み】科学的記数法なしで、与えられた精度でnumpy.arrayをpretty-printするには?

2022-03-24 20:20:50

質問

を印刷する方法はないのでしょうか? numpy.arrays のような方法で、例えば、このように表示されます。

x = 1.23456
print '%.3f' % x

を表示させたい場合は numpy.array の浮動小数点が表示され、しばしば「scientific」形式で表示されます。しかし numpy.array どうやら文字列として表示する必要があるようだ。 %s . これに対する解決策はあるのでしょうか?

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

を使用することができます。 set_printoptions で、出力の精度を設定します。

import numpy as np
x=np.random.random(10)
print(x)
# [ 0.07837821  0.48002108  0.41274116  0.82993414  0.77610352  0.1023732
#   0.51303098  0.4617183   0.33487207  0.71162095]

np.set_printoptions(precision=3)
print(x)
# [ 0.078  0.48   0.413  0.83   0.776  0.102  0.513  0.462  0.335  0.712]

そして suppress は、小さな数に対して科学的記法を使用しないようにします。

y=np.array([1.5e-10,1.5,1500])
print(y)
# [  1.500e-10   1.500e+00   1.500e+03]
np.set_printoptions(suppress=True)
print(y)
# [    0.      1.5  1500. ]

をご覧ください。 set_printoptions のドキュメント をクリックすると、他のオプションが表示されます。


印刷オプションをローカルに適用する NumPy 1.15.0 以降を使用している場合は、以下のようになります。 numpy.printoptions コンテキスト・マネージャーを使用します。 例えば with-suite precision=3suppress=True が設定されます。

x = np.random.random(10)
with np.printoptions(precision=3, suppress=True):
    print(x)
    # [ 0.073  0.461  0.689  0.754  0.624  0.901  0.049  0.582  0.557  0.348]

しかし、その外側にある with-suite 印刷オプションはデフォルトの設定に戻ります。

print(x)    
# [ 0.07334334  0.46132615  0.68935231  0.75379645  0.62424021  0.90115836
#   0.04879837  0.58207504  0.55694118  0.34768638]

以前のバージョンのNumPyを使用している場合は、コンテキストマネージャーを作成することができます。 を自分で作成します。例えば

import numpy as np
import contextlib

@contextlib.contextmanager
def printoptions(*args, **kwargs):
    original = np.get_printoptions()
    np.set_printoptions(*args, **kwargs)
    try:
        yield
    finally: 
        np.set_printoptions(**original)

x = np.random.random(10)
with printoptions(precision=3, suppress=True):
    print(x)
    # [ 0.073  0.461  0.689  0.754  0.624  0.901  0.049  0.582  0.557  0.348]


浮動小数点数の末尾からゼロが取り除かれないようにするため。

np.set_printoptions を持つようになりました。 formatter パラメータで、各タイプのフォーマット関数を指定することができます。

np.set_printoptions(formatter={'float': '{: 0.3f}'.format})
print(x)

と表示されます。

[ 0.078  0.480  0.413  0.830  0.776  0.102  0.513  0.462  0.335  0.712]

ではなく

[ 0.078  0.48   0.413  0.83   0.776  0.102  0.513  0.462  0.335  0.712]