numpyのround関数は、配列の要素を指定した小数点以下の桁数で丸める関数です。データ分析や数値計算において、計算結果を見やすくしたり、メモリ使用量を削減したりする際に重要な役割を果たします。
基本的な使い方
numpy.round()は、配列の各要素を最も近い整数または指定した小数点以下の桁数に丸めます。一般的な四捨五入とは異なり、0.5の場合は最も近い偶数に丸められます。
0.5の場合の丸め方
numpyでは0.5の場合、最も近い偶数に丸められます。これは四捨五入とは異なる動作です。
import numpy as np
# 0.5の場合の丸め方(偶数に丸められる)
values = np.array([0.5, 1.5, 2.5, 3.5, 4.5])
result = np.round(values)
print(result)
# [0. 2. 2. 4. 4.]
# 0.5→0、1.5→2、2.5→2、3.5→4、4.5→4(すべて偶数)
# 四捨五入なら1.5→2、2.5→3、3.5→4、4.5→5となるが、numpyは異なる
基本的な丸め操作
配列の各要素を指定した桁数で丸める基本的な使い方です。
import numpy as np
# 基本的な丸め(整数に丸める)
arr = np.array([1.2, 2.7, 3.1, 4.9])
result = np.round(arr)
print(result)
# [1. 3. 3. 5.]
# 小数点以下1桁に丸める
arr2 = np.array([1.234, 2.678, 3.999])
result2 = np.round(arr2, decimals=1)
print(result2)
# [1.2 2.7 4. ]
decimalsパラメータの使用例
decimalsパラメータを使用することで、小数点以下の桁数を指定できます。負の値を指定すると、整数部分の桁数を丸めることも可能です。
import numpy as np
# 小数点以下2桁に丸める
arr = np.array([3.14159, 2.71828, 1.41421])
result = np.round(arr, decimals=2)
print(result)
# [3.14 2.72 1.41]
# 小数点以下3桁に丸める
result2 = np.round(arr, decimals=3)
print(result2)
# [3.142 2.718 1.414]
# 負の値で整数部分を丸める
large_numbers = np.array([1234.56, 5678.90, 9876.54])
result3 = np.round(large_numbers, decimals=-1)
print(result3)
# [1230. 5680. 9880.]
result4 = np.round(large_numbers, decimals=-2)
print(result4)
# [1200. 5700. 9900.]
似た関数
ndarray.round
配列オブジェクトのメソッドとして使用できるround関数です。numpy.round()と同じ機能を提供しますが、メソッドチェーンで使用できる利点があります。
import numpy as np
arr = np.array([1.234, 2.678, 3.999])
result = arr.round(decimals=1)
print(result)
# [1.2 2.7 4. ]
# メソッドチェーンでの使用例
arr2 = np.array([[1.234, 2.678], [3.999, 4.123]])
result2 = arr2.transpose().round(decimals=2)
print(result2)
# [[1.23 4. ]
# [2.68 4.12]]
np.around
numpy.round()の別名(エイリアス)です。機能は完全に同じで、どちらを使用しても結果は変わりません。
import numpy as np
arr = np.array([1.234, 2.678, 3.999])
# np.roundとnp.aroundは同じ結果
result1 = np.round(arr, decimals=1)
result2 = np.around(arr, decimals=1)
print(result1)
# [1.2 2.7 4. ]
print(result2)
# [1.2 2.7 4. ]
print(np.array_equal(result1, result2))
# True
pythonのround
Python標準のround関数は単一の数値に対してのみ動作し、配列全体を一度に処理することはできません。基本的な丸め方式は同じですが、浮動小数点数の精度の問題により、結果が異なる場合があります。
import numpy as np
# 基本的な丸めは同じ結果
print("Python:", round(2.5)) # 2
print("Numpy:", np.round(2.5)) # 2.0
# 浮動小数点数の精度により結果が異なる場合
print("Python:", round(16.055, 2)) # 16.05
print("Numpy:", np.round(16.055, 2)) # 16.06
# 16.055は内部的に16.0549999999999997として表現されるため
# 配列に対してはnumpyのroundが必要
arr = np.array([1.234, 2.678, 3.999])
# round(arr, 1) # エラーになる
numpy_array_result = np.round(arr, decimals=1)
print(numpy_array_result)
# [1.2 2.7 4. ]
まとめ
numpy.round()は配列の要素を効率的に丸める関数で、データ分析や数値計算において重要な役割を果たします。decimalsパラメータを使用することで柔軟な桁数指定が可能で、負の値を指定すれば整数部分の丸めも行えます。ndarray.roundメソッドやnp.around関数も同様の機能を提供するため、用途に応じて使い分けることができます。