0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

なぜnp.arangeを使うべきではないのか

Posted at

環境

numpy version:1.24.3

numpy arangeの沼

arangeのドキュメンテーションも参考に、次のコードがどのような数列を返すと思いますか?

for i in np.arange(3.0, 4.4, 0.1):
    print(i)

想像するのは

3.0
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
3.9
4.0
4.1
4.2
4.3

こんな出力でしょう。しかし、実際に返されるのは次のような出力です。

3.0
3.1
3.2
3.3000000000000003
3.4000000000000004
3.5000000000000004
3.6000000000000005
3.7000000000000006
3.8000000000000007
3.900000000000001
4.000000000000001
4.100000000000001
4.200000000000001
4.300000000000001
4.400000000000001

そうなんです。arangeに指定した、endの値の4.4を超えます!!
これがarangeの沼です。つまり、丸目誤差のせいで思った挙動をせず不安定な挙動をします。enumerateと一緒に使って日には最悪です。out of rangeが返ってくるわけですから。

こちらにより詳しい解説がありますので、ご参照ください。

結論

上記url記事にもある通り、挙動の安定するnp.linspaceやrangeを使うようにしましょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?