9
>>> np.__version__
'1.7.0'
>>> np.sqrt(10000000000000000000)
3162277660.1683793
>>> np.sqrt(100000000000000000000.)
10000000000.0
>>> np.sqrt(100000000000000000000)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: sqrt

えっと…AttributeError: sqrtじゃあここで何が起こってるの? math.sqrt同じ問題はないようです。

4

1 に答える 1

10

最後の数値は a long(任意精度の整数に対する Python の名前) であり、NumPy では明らかに処理できません。

>>> type(100000000000000000000)
<type 'long'>
>>> type(np.int(100000000000000000000))
<type 'long'>
>>> np.int64(100000000000000000000)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OverflowError: Python int too large to convert to C long

これAttributeErrorは、NumPy が、処理方法がわからない型を見て、デフォルトsqrtでオブジェクトのメソッドを呼び出すために発生します。しかし、それは存在しません。だから、それnumpy.sqrtが欠けているわけではありませんがlong.sqrt.

対照的に、math.sqrtについて知っていlongます。NumPy で非常に大きな数を処理する場合は、可能な限り float を使用してください。

EDIT : わかりました、あなたは Python 3 を使用しています。そのバージョンではintとの区別long はなくなりましたが、NumPy は、使用PyLongObjectして C に正常に変換できるa とできない a の違いにまだ敏感です。longPyLong_AsLong

于 2013-03-13T16:26:11.773 に答える