Die endgültige Zahl ist ein long
(Python Name für eine beliebige Präzision ganze Zahl), die NumPy offenbar nicht umgehen kann:
>>> 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
Die AttributeError
tritt auf, weil NumPy, eine Art zu sehen, dass es nicht der Fall ist wissen, wie man damit umgeht, ruft standardmäßig die Methode sqrt
auf dem Objekt auf; aber das existiert nicht. Es ist also nicht numpy.sqrt
, die fehlt, aber long.sqrt
.
Im Gegensatz dazu math.sqrt
weiß über long
. Wenn Sie mit sehr großen Zahlen in NumPy umgehen wollen, verwenden Sie Floats, wann immer dies möglich ist.
EDIT: Okay, sind Sie mit 3. Python Während die Unterscheidung zwischen int
und long
has disappeared in dieser Version NumPy noch empfindlich auf die Differenz zwischen einem PyLongObject
ist, die erfolgreich in ein C umgerechnet werden können long
PyLong_AsLong
mit und eine, die nicht kann.
Hier etwas Neues gelernt. Danke fürs Schreiben! – mgilson