NumPy の set_printoptions について

`numpy.set_printoptions()` は、NumPy 配列やその他の NumPy オブジェクトの表示方法を制御するためのオプションを設定する関数です。これらのオプションは、浮動小数点数の精度、配列の表示しきい値、要約時の要素数などをカスタマイズできます。


## オプションと使用例

以下は、主要なオプションと、それらの使い方の例です。


### `precision` (精度)

浮動小数点数の出力精度を指定します。デフォルトは 8 です。`floatmode` が `fixed` でない場合は `None` を指定することで、値を一意に指定するために必要な桁数を表示します。

```python
import numpy as np

# 精度を小数点以下4桁に設定
np.set_printoptions(precision=4)
print(np.array([1.123456789]))  # 出力: [1.1235]

# 精度をデフォルトに戻すには None を指定
np.set_printoptions(precision=None) 
```



### `threshold` (しきい値)

配列要素の合計数がこのしきい値を超えると、完全な表現ではなく要約が表示されます。デフォルトは 1000 です。常に完全な表現を使用するには `sys.maxsize` を渡します。

```python
import numpy as np
import sys

# しきい値を 5 に設定
np.set_printoptions(threshold=5)
print(np.arange(10))  # 出力: [0 1 2 ... 7 8 9]

# しきい値を無効にするには sys.maxsize を指定
np.set_printoptions(threshold=sys.maxsize)
```


### `edgeitems` (端の要素数)

各次元の先頭と末尾に表示される配列要素の数を指定します。デフォルトは 3 です。

```python
import numpy as np

# 端の要素数を 3 に設定
np.set_printoptions(edgeitems=3)
print(np.arange(10000)) # 出力: [   0    1    2 ... 9997 9998 9999]
```


### `linewidth` (行の幅)

改行を挿入するための行の文字数を指定します。デフォルトは 75 です。

```python
import numpy as np

# 行の幅を 50 に設定
np.set_printoptions(linewidth=50)
print(np.arange(20)) # 出力が50文字で折り返される
```


### `suppress` (小さな値の抑制)

`True` の場合、常に固定小数点表記を使用して浮動小数点数を表示します。この場合、現在の精度でゼロに等しい数値はゼロとして表示されます。`False` の場合、最小数の絶対値が 1e-4 未満、または最大絶対値と最小値の比率が 1e3 を超える場合、科学表記法が使用されます。デフォルトは `False` です。

```python
import numpy as np

eps = np.finfo(float).eps
x = np.arange(4.)

# suppress=False (デフォルト)
print(x**2 - (x + eps)**2) # 出力: [-4.9304e-32 -4.4409e-16  0.0000e+00  0.0000e+00]

# 小さな値を抑制
np.set_printoptions(suppress=True)
print(x**2 - (x + eps)**2) # 出力: [-0. -0.  0.  0.]
```


### `nanstr` , `infstr` (NaNと無限大の表示)

浮動小数点数の非数 (NaN) および無限大 (inf) の文字列表現を指定します。デフォルトはそれぞれ `'nan'` と `'inf'` です。

```python
import numpy as np

# NaN と無限大の表示を変更
np.set_printoptions(nanstr='Not a Number', infstr='Infinity')
print(np.array([np.nan, np.inf, -np.inf]))  # 出力: [Not a Number Infinity -Infinity]
```


### `formatter` (フォーマッタ)

特定の型の値をフォーマットするための関数を指定できます。

```python
import numpy as np

# すべての型を16進数で表示するフォーマッタ
np.set_printoptions(formatter={'all': lambda x: hex(x)})
print(np.arange(3))  # 出力: [0x0 0x1 0x2]

# フォーマッタをリセット
np.set_printoptions(formatter=None)  
```



### `sign` (符号)

浮動小数点型の符号の表示方法を制御します。

- `'-'` : 正の値の符号を省略します (デフォルト)。
- `'+'` : 正の値の符号を常に表示します。
- `' '` : 正の値の符号の位置にスペースを表示します。


```python
import numpy as np

np.set_printoptions(sign='+')
print(np.array([1.5, -2.5])) # 出力: [+1.5 -2.5]

np.set_printoptions(sign=' ')
print(np.array([1.5, -2.5])) # 出力: [ 1.5 -2.5]
```


### `floatmode` (浮動小数点モード)

`precision` オプションの解釈方法を制御します。

- `'fixed'` : 常に正確に `precision` で指定された小数点以下の桁数を表示します。
- `'unique'` : 各値を一意に表現するために必要な最小限の小数点以下の桁数を表示します。
- `'maxprec'` : 最大で `precision` で指定された小数点以下の桁数を表示しますが、より少ない桁数で一意に表現できる場合は、その桁数で表示します。
- `'maxprec_equal'` : 最大で `precision` で指定された小数点以下の桁数を表示しますが、配列内のすべての要素が同じ少ない桁数で一意に表現できる場合は、その桁数をすべての要素に使用します。


```python
import numpy as np

np.set_printoptions(floatmode='maxprec', precision=3)
print(np.array([0.12345, 1.2345])) # 出力: [0.123 1.234]
```



### `legacy` (レガシーモード)

以前のバージョンの NumPy の出力形式を再現するためのオプションです。


```python
import numpy as np

np.set_printoptions(legacy='1.13')  # NumPy 1.13 の出力形式
print(np.array([1.5]))  # 1.13以前の形式で出力される
```

`printoptions` コンテキストマネージャーを使うと、一時的に設定を変更できます。

```python
import numpy as np

with np.printoptions(precision=2, suppress=True):
    print(np.array([1.12345, 0.00001])) # 出力 [1.12 0.  ]
```


これらのオプションを適切に設定することで、配列の表示をより見やすく、目的に合わせて調整することができます。