pythonで下記のようなfor文を回そうとしたところエラーが出ました。
for i in range(1.0,4.0,0.01): pass
エラー内容は
TypeError: 'float' object cannot be interpreted as an integer
です。
原因や解決方法のわかる方、ご教示ください。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
range
関数には実数(浮動小数点数)は使えません。数えられないからです。
Python
1for int_i in range(100,400,1): 2 i = int_i / 100.0 3 ~~~
投稿2018/12/05 06:07
総合スコア85901
0
ベストアンサー
range関数には、浮動小数を渡すことができないのです。
代替案は三つです。
- numpy.arangeを使う
- numpy.linspaceを使う
- while文に書き直す
一番目の方法だと、現状のコードを活かせます。
二番目の方法だと、繰り返し回数を制御できます。
三番目の方法だと、サードパーティモジュールの導入が不要です。
どちらにせよ、浮動小数を扱う時点で誤差の発生は避けられませんが。
投稿2018/12/05 06:01
編集2018/12/05 06:02総合スコア35668
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
英語のページですが、頑張って読んでみてください。
(説明文を無視して、プログラムコードを読んだり試したりするだけでも良いと思います)
Python range for float numbers with Examples
https://pynative.com/python-range-for-float-numbers/
投稿2018/12/05 13:45
総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
コードを書きたいので新しく回答を作りますが、otnさんの回答か、LouiS0616さんの回答のnumpy.linspace
を使うのが正着です。
1.0から始めて0.01ずつ足すやり方では、誤差を積み上げてしまうからです。
整数値を刻んでそれを割る、という順番にするべきです。
>>> import numpy as np >>> for i in range(300)[-10:]: ... print(1.0 + i / 100) ... 3.9 3.91 3.92 3.93 3.94 3.95 3.96 3.97 3.98 3.99 >>> for x in np.linspace(1.0, 3.99, 300)[-10:]: ... print(x) ... 3.9 3.91 3.92 3.93 3.94 3.95 3.96 3.97 3.98 3.99 >>> for x in np.arange(1.0, 4.0, 0.01)[-10:]: ... print(x) ... 3.9000000000000026 3.910000000000003 3.9200000000000026 3.9300000000000024 3.9400000000000026 3.950000000000003 3.9600000000000026 3.9700000000000024 3.9800000000000026 3.990000000000003
numpy.linspace
の実装を見ると、要は、
np.arange(300) * 0.01 + 1.0
を計算しているようなので、これでもいいかと。
投稿2018/12/05 06:46
総合スコア11235
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
int型しか回せません。
float型は回せない
投稿2018/12/05 05:59
総合スコア2321
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
関連した質問
pythonでfor i in range(1.0,4.0,0.01): とすると、'float' object cannot be interpreted as an integerというエラー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。