PythonとNumPyにおける数値の切り上げと切り下げ(ceilとfloor):floorとtruncの違いに注意しよう
2023.02.18
小数の切り上げと切り下げ(切り捨て)は ceil と floor を使います。これは Python のビルト・イン関数でなく math パッケージにあります。
import math
a = math.ceil(3.14)
b = math.floor(3.14)
print(a) # 4
print(b) # 3
複数個の値を切り上げ・切り捨てするときは NumPy を使うといいでしょう。NumPy にも同名の関数があります。
import numpy as np
a = np.ceil(3.14)
b = np.floor(3.14)
print(a) # 4.0
print(b) # 3.0
NumPy で複数個の小数を切り上げ・切り捨てする
NumPy の配列を使うと、複数個の小数を切り上げ・切り下げ(切り捨て)できます。
import numpy as np
x = np.array([2.5, 8.3])
a = np.ceil(x)
b = np.floor(x)
print(a) # [3. 9.]
print(b) # [2. 8.]
ceil と floor に配列を入れると、配列の要素をそれぞれ処理して返します。
NumPy の切り捨てには trunc もある
NumPy の切り捨ては floor と trunc があります。
import numpy as np
a = np.ceil(3.14)
b = np.floor(3.14)
c = np.trunc(3.14)
print(a) # 4.0
print(b) # 3.0
print(c) # 3.0
floor と trunc の違いは下のコードを見るとわかります。
import numpy as np
x = np.array([-2.8, -1.2, -0.7, 0, 0.5, 1.8])
a = np.floor(x)
b = np.trunc(x)
print(a) # [-3. -2. -1. 0. 0. 1.]
print(b) # [-2. -1. -0. 0. 0. 1.]
マイナス値の処理が変わっています。trunc は切り捨てというより、単に整数部分をとっています。
- floor は切り捨て
- trunc は整数部分を返す
いわゆる「切り捨て」をしたいときは floor のほうがいいでしょう。