1. ホーム
  2. python

[解決済み] 10進数のrange()ステップ値を使用するには?

2022-03-20 11:01:41

質問

0と1の間を0.1ずつステップする方法はありますか?

のように出来ると思ったのですが、失敗しました。

for i in range(0, 1, 0.1):
    print i

その代わり、stepの引数を0にすることはできないと書いてあり、これは予想外でした。

解決方法は?

小数のステップを直接使うよりも、何ポイント欲しいかで表現した方がより安全です。そうしないと、浮動小数点の丸め誤差で間違った結果が出る可能性が高いからです。

を使用することができます。 リンスペース 関数から NumPy ライブラリ(標準ライブラリには含まれませんが、比較的簡単に入手できます)を使用します。 linspace は返すべき点の数を取り、また、右端を含めるかどうかを指定することができます。

>>> np.linspace(0,1,11)
array([ 0. ,  0.1,  0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8,  0.9,  1. ])
>>> np.linspace(0,1,10,endpoint=False)
array([ 0. ,  0.1,  0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8,  0.9])

どうしても浮動小数点数のステップ値を使いたい場合は numpy.arange .

>>> import numpy as np
>>> np.arange(0.0, 1.0, 0.1)
array([ 0. ,  0.1,  0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8,  0.9])

浮動小数点丸め誤差 意志 が問題になりますが。以下は、丸め誤差が原因で arange は、3つの数値しか生成できないはずなのに、長さ4の配列を生成してしまいます。

>>> numpy.arange(1, 1.3, 0.1)
array([1. , 1.1, 1.2, 1.3])