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

大きな整数を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

 

関連記事

windows10でchainer3系+CUDA+cuDNNをインストールする手順

vvvvでつまづきそうなところと動画書き出し例

こうして『宇宙よりも遠い場所』は僕の人生の一部となった(ネタバレあり)

さくらvpsでNEMスーパーノード構築 その2

簡単なCLIアプリやバッチ処理用のPythonのテンプレート

さくらvpsでNEMスーパーノード構築 その1

コメント

コメントを返信する

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