6
1

More than 3 years have passed since last update.

numpyをストレスなく使う!(エラー「AttributeError: 'float' object has no attribute 'sin'」の解釈(対処?))

Posted at

目的

 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に詳しくなった。
numpyは、深いので、まだ、誤差の範囲だと思うが。

関連(本人)

英語と日本語、両方使ってPythonを丁寧に学ぶ。

今後

numpy、学ぶぞーーーー。
コメントなどあれば、お願いします。:candy:

6
1
2

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
6
1