『Python数値計算ノート』ではアフィリエイトプログラムを利用して商品を紹介しています。

【NumPy】表示形式の設定

numpy.get_printoptions()

numpy.get_printoptions() は現在設定されている配列の表示形式を取得します。
デフォルトでは以下のような設定になっているはずです。

# GET_PRINT_OPTIONS

# In[1]

import numpy as np

# 配列の表示形式を取得
np.get_printoptions()

'''
{'edgeitems': 3,
 'threshold': 1000,
 'floatmode': 'maxprec',
 'precision': 8,
 'suppress': False,
 'linewidth': 75,
 'nanstr': 'nan',
 'infstr': 'inf',
 'sign': '-',
 'formatter': None,
 'legacy': False}
'''

この設定は numpy.set_printoptions() を使って変更できます。
各項目の意味については以下の節で説明します。

numpy.set_printoptions()

numpy.set_printoptions() は配列の表示形式を設定します。浮動小数点数を指定の桁で丸めたり、大きな配列を要約表示することできます。この関数が設定するのは、あくまで表示形式 (見た目) であって、配列の中身を変更するわけではありません。

precision

precision で浮動小数点数の小数点以下の表示桁数を指定します。

# SET_PRINT_OPTIONS_PRECISION

# In[1]

import numpy as np

arr = np.array([1.23, 1.2345, 1.234567])

# 小数点以下3桁まで表示
np.set_printoptions(precision=3)

print(arr)
# [1.23  1.234 1.235]

指定するのは有効数字の桁数ではなく、小数点以下の桁数であることに注意してください。

floatmode

floatmode は浮動小数点数の表示形式を設定します。
precision=n が設定されているとします。
floatmode に “maxprec” を渡すと、各要素を小数点以下最大 n 桁で表示し、n 桁に満たない数字はそのまま表示されます。

# SET_PRINT_OPTIONS_FLOATMODE

# In[1]

import numpy as np

arr = np.array([1.23, 1.2345, 1.234567])

# 要素を小数点以下最大5桁で表示
# 5桁に満たない数字はそのまま表示
np.set_printoptions(precision=5, floatmode="maxprec")

print(arr)
# [1.23    1.2345  1.23457]

floatmode に “fixed” を指定すると、各要素を小数点以下最大 n 桁で表示し、n 桁に満たない数字は 0 で埋めて桁を揃えます。

# In[2]

arr = np.array([1.23, 1.2345, 1.234567])

# 要素を小数点以下5桁で表示
# 5桁に満たない数字は0で埋めて桁を揃える
np.set_printoptions(precision=5, floatmode="fixed")

print(arr)
# [1.23000 1.23450 1.23457]

suppress

デフォルト設定 (suppress=False) では、0.0001 より小さな値は指数表記となります。

# SET_PRINT_OPTIONS_SUPPRESS

# In[1]

import numpy as np

# デフォルト(suppress=False)では1e-4より小さい数値は指数表記
np.set_printoptions(precision=8, suppress=False)

a = np.array([0.0001])
b = np.array([0.00009])

print(a, b)
# [0.0001] [9.e-05]

suppress=True に設定すると、常に小数表記となります。

# In[2]

# suppress=Trueに設定すると常に小数表記
np.set_printoptions(precision=8, suppress=True)

print(a, b)
# [0.0001] [0.00009]

threshold

threshold で省略表示しない配列の軸に沿った最大要素数 (閾値) を指定します。たとえば、threshold=10 と指定した場合、10 個の要素をもつ 1 次元配列は省略されませんが、11 個を超える要素をもつ 1 次元配列は省略して表示されます。

# SET_PRINT_OPTIONS_THRESHOLD

# In[1]

import numpy as np

# 最大10要素の配列まではフルで表示
# 11要素を超える配列は省略表示
np.set_printoptions(threshold=10)

a = np.arange(10)
b = np.arange(11)

print(a)
print(b)

# [0 1 2 3 4 5 6 7 8 9]
# [ 0  1  2 ...  8  9 10]

2 次元配列の場合、全要素数ではなく軸に沿った要素数が基準となります。

# In[2]

np.set_printoptions(threshold=10)

c = np.arange(36).reshape(6, 6)
d = np.arange(36).reshape(3, 12)

print(c)
print(d)

'''
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]
 [24 25 26 27 28 29]
 [30 31 32 33 34 35]]

[[ 0  1  2 ...  9 10 11]
 [12 13 14 ... 21 22 23]
 [24 25 26 ... 33 34 35]]
'''

edgeitems

edgeitems は配列を省略表示するときの先頭と末尾に表示する要素数です。

# SET_PRINT_OPTIONS_EDGEITEMS

# In[1]

import numpy as np

# 省略表示したとき、先頭と末尾に2個の要素を表示する
np.set_printoptions(threshold=10, edgeitems=2)

arr = np.arange(11)

print(arr)
# [ 0  1 ...  9 10]

linewidth

linewidth は一行に表示する文字数です。

# SET_PRINT_OPTIONS_LINEWIDTH

# In[1]

import numpy as np

# 1行に表示する文字数を7に設定
np.set_printoptions(threshold=12, linewidth=7)

arr = np.arange(12)

print(arr)

'''
[ 0  1
  2  3
  4  5
  6  7
  8  9
 10 11]
'''

nanstr, infstr

nanstr で非数 (np.nan) の表記、infstr で無限大 (np.inf) の表記を指定できます。

# SET_PRINT_OPTIONS_NANSTR_INFSTR

# In[1]

import numpy as np

# 非数(np.nan)を"□",無限大(np.inf)を"∞"で表示
np.set_printoptions(nanstr="□", infstr="∞")

arr = np.array([np.nan, np.inf])

print(arr)
# [□ ∞]

コメント

  1. HNaito より:

    下記は誤植と思われますので、ご確認ください。
    OPTIONS_06 プログラムのコメントで、文字数を6に → 文字数を7に
    OPTIONS_06 プログラムで、(linewidth=7) → (threshold=12, linewidth=7)
    ※OPTIONS_04-2 プログラムの実行後では、threshold=10となっているため再設定必要