numpyをストレスなく使う!
Pythonで計算などをする場合には、
numpy
が頻繁に使われる。そのため、numpy関連のエラーに出会うことも少なくない。
エラーを早めに解決するためには、少しでも、理解のレベルを上げる必要あり。
なんでも、こだわって、、、、理解を深める。
ここで、取り上げるエラーは、以下。
AttributeError: 'float' object has no attribute 'sin'
どのような場面で出るかというと、例えば、以下。
>>> import numpy as np
>>> a = np.array([1.1, 2.2],dtype=object)
>>> np.sin(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'float' object has no attribute 'sin'
このエラーをとりあげる理由は、
エラーの意味がわからない
だろうと思うため。
'float'オブジェクトが、sinを持たない
と言われているが、そんな処理は、依頼してないし。。。。
Name: numpy
Version: 1.16.4
エラーの説明
このエラーに対しては、以下の記事が参考になる。
ここでの報告者の方は、
Many NumPy methods fail if an array has dtype object, and produce a misleading error message.
他力で、日本語にすると(Google翻訳(ママ) )
配列にdtypeオブジェクトがある場合、多くのNumPyメソッドは失敗し、誤解を招くエラーメッセージが生成されます。
と主張されている。
⇒そのとおりだと思う。
このサイトでのやり取りの結論は、よくわからないのですが、、、
とにかく、
numpy側も
エラーメッセージがあまり適切でない
ことは、認めているよう。
治しているようにも読めるが。。。。治ってない気がします。
エラーの対処方法
エラーの対処方法は、そもそも、何がやりたいのかにもよるが、
経緯上、dtype=objectである必要があるのであれば、
sinの計算の前に、astypeでキャストする
などがいいと思う。
>>> a = np.array([1.1, 2.2],dtype=object)
>>> np.sin(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'float' object has no attribute 'sin'
>>> np.sin(a.astype(np.float64))
array([0.89120736, 0.8084964 ])
numpy、学ぶぞーーーー。
コメントなどあれば、お願いします。