Pythonで小数の連続した数値を作成するのに、NumPyのarange関数を使った、
x = np.arange(0.1, 0.5, 0.1)
といった(疑問に感じる)コードが、紹介されているのを見かけました。
np.arange(0.1, 0.4, 0.1)の結果が変
拙著『VBAユーザーのためのPython超入門』でも多用しているIDLEで、
import numpy as np
x = np.arange(0.1, 0.5, 0.1)
を実行後に、print(x)してみると
[0.1, 0.2, 0.3, 0.4]
と出力され、確かに小数の連番が取得できているようです。
しかし、arange関数の第2引数を変更した
x = np.arange(0.1, 0.4, 0.1)
の実行後にprint(x)すると、これも、
[0.1 0.2 0.3 0.4]
と出力されてしまうのです。[0.1 0.2 0.3]ではなく。
引数stopが異なる、
np.arange(0.1, 0.5, 0.1)
と、
np.arange(0.1, 0.4, 0.1)
の結果が同じであるのは、明らかに変です。もちろんこれは、現在のコンピューターでは基本的に小数を正しく表現できないことに起因します。
何故このような結果になってしまうのかの詳細については、以下の記事が参考になるでしょう。
NumPyのarrangeを使って小数の連番を作成するには
回避策としては、整数の連番を割り算して作成する方法がわかりやすいと私は思います。
x = np.arange(1, 4, 1) / 10
としてやれば、期待どおり、
[0.1 0.2 0.3]
が得られます。
最終更新日時:2021-09-13 16:06