Help us understand the problem. What is going on with this article?

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

目的

 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

エラーの説明

このエラーに対しては、以下の記事が参考になる。

https://github.com/numpy/numpy/issues/13666

ここでの報告者の方は、

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:

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした