[最終更新] 2017年2月21日
Pythonで、以前から「VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future」という警告が出て、なんだろうなと思っていたのですが、どうやら意図せずして要素数がfloatに、つまりary[3]となるべきところがary[3.0]のような状況になっていました。python3では6/2=3.0なんですね。
除算すると小数に
Python3では、普通に / を用いて除算すると、整数同士でもfloatになるようです。具体的には、6/2 = 3.0 となります。これを避けるには、 / ではなく // を用います。すると、6//2 = 3 です。また、7//2 = 3です。正直こちらの挙動のほうが馴染みがあります…。
これは有名というか当たり前なんでしょうけれど、恥ずかしながら知りませんでした(参考:「Python 3ではまったこと – minus9d’s diary」)。環境によって警告が出たり出なかったりしたのは、バージョン違いによるものだったのか…。
警告というか、本来エラーが出るべきところです。実際、通常はエラーです。が、私は今回numpyを使っていて、numpyだとary[3.0]のように書いてもちゃんと処理してくれるようなのです。が、間違いは間違いなので、警告が出る、といったところでしょうか。
numpy.onesはデフォルトfloat64
もう一つnumpy絡みで。numpy.ones — NumPy v1.11 Manualによると、numpy.onesはデフォルト値がfloat64。なので、numpy.onesを演算に組み込むと、値がfloatになってしまいます。これも引っかかりました。整数の演算に組むこむのであれば、dtypeでintを指定してやらないといけません。
動的型付け言語は便利ですが、意識しなくてよいわけではないですしね。こういう間違いをすると凹みます。
関連記事
Python の記事
- [2017年12月25日] seleniumのGoogle検索で最初にヒットしたサイトのスクリーンショットを撮る
- [2017年12月22日] pythonでExcelファイル内の半角をすべて全角にする
- [2017年11月14日] pythonのxlsxwriterでフォーマットの上書きをしたいが…
- [2016年10月22日] pythonのPyYAMLでブロック形式で書き込み(dump出力)
- [2016年10月4日] 旧版:とにかくRaspberry Piにpython3 + numpy + matplotlibをインストールする(pyenv使用)
- ---本記事---
- [2015年12月17日] matplotlib も十分わかりやすく思えてしまう
- [2015年9月16日] Python でクロスプラットフォームの排他ロックはなかなか難しく
- [2015年8月5日] Raspbian で python-dev がインストールできなかった
- [2015年7月24日] Numpyを入れようとして「python version 3.4 required which was not found in the registry」と怒られた
- [2015年7月17日] Raspberry Pi のGPIO経由で入力信号を連続的に取得
スポンサーリンク