このスレで議論されている話題。

大きな整数をnumpyの関数に渡すと、 AttributeError: ‘int’ object has no attribute のエラーになることがある。

例えば、

>>> import numpy as np
>>> np.log2(2**63)
63.0
>>> np.log2(2**64)
Traceback (most recent call last):
  File "", line 1, in 
AttributeError: 'int' object has no attribute 'log2'

 

これはnumpy内部のデータ型がuint64からobjectへと変わることで起こっているようだ。

>>> np.array([2**63])
array([9223372036854775808], dtype=uint64)
>>> np.array([2**64])
array([18446744073709551616], dtype=object)

以下のようにすれば回避可能:

>>> np.log2(float(2**64))
64.0
>>> np.log2(2.**64)
64.0
>>> import math
>>> math.log2(2**64)
64.0

 

関連記事

blenderでオブジェクトのキーフレームを途中からごっそり入れ替える

MiSTEL BAROCCO MD650Lの持ち運びにはあのケースがぴったり

高層を拒否し、「ニュー オールドタウン」を選択したフランクフルトの市民参加型都市計画

echo spotでスマホを持ってない人とテレビ電話をする方法

MiSTEL BAROCCO MD650Lをbluetooth接続にしてmobilityを爆上げ

MiSTEL BAROCCO MD650Lを持ち運びやすくするマグネット足を作った

コメント

コメントを返信する

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です