"OverflowError: Python int zu groß ist, um konvertieren zu C-lang" auf windows und nicht mac
Ich bin mit den exakt selben code auf beiden windows und mac, mit python 3.5 64-bit.
Unter windows sieht es wie folgt aus:
>>> import numpy as np
>>> preds = np.zeros((1, 3), dtype=int)
>>> p = [6802256107, 5017549029, 3745804973]
>>> preds[0] = p
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
preds[0] = p
OverflowError: Python int too large to convert to C long
Jedoch, dieser code funktioniert einwandfrei auf meinem mac. Könnte jemand helfen zu erklären, warum oder geben Sie eine Lösung für den code auf windows? Vielen Dank!
- Sie sind sicher, beide sind 64 bit? können Sie test auf linux?
- Auch wenn beide Systeme auf 64-bit-Python, sind Sie beide auf 64-bit-NumPy?
- Ein weiterer stackoverflow-Frage erklärt 'warum'. Auf Windows lange ist 32bit und auf Unux-wie lange ist 64bit. Bitte siehe Frage stackoverflow.com/questions/384502/...
- Verwenden
dtype='int64'
oderdtype=np.int64
. Dieint
Typ verwendet eine Clong
, das ist immer 32-bit auf Windows. - Tim: ja, beide sind 64bit. Ich habe keinen linux Rechner, sorry. zu user2357112: ja, beide sind 64-bit-python und numpy. zu VladimirM: Danke! Ich denke, diese Frage Antworten mir! zu eryksun: Danke! Es funktioniert!
- Wie würden Sie dies tun, ohne numpy?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erhalten Sie diesen Fehler, sobald Ihre zahlen sind größer als
sys.maxsize
:Können Sie das überprüfen, indem Sie:
Nehmen zahlen mit größerer Genauigkeit, don ' T pass eine int-Typ, die verwendet eine berandete C integer-hinter den kulissen. Verwenden Sie die Standardeinstellung float:
TypeError: integer argument expected, got float
Können Sie verwenden, dtype=np.int64 anstatt von dtype=int
In Python 2 (python "int" war gleichbedeutend mit einem C lange. In Python 3 ein "int" ist eine beliebige Genauigkeit Typ, aber numpy verwendet immer noch "int", die es zur Darstellung der C-Typ "long", wenn das erstellen von arrays.
In der Größe eines C lange ist Plattform abhängig. Auf windows ist es immer 32-bit. Auf unix-artigen Systemen ist es normalerweise 32-bit-auf 32-bit-Systeme und 64-bit-auf 64-bit-Systemen.
Wählen Sie einen Datentyp, dessen Größe ist nicht Plattform abhängig. Sie finden die Liste auf https://docs.scipy.org/doc/numpy/reference/arrays.scalars.html#arrays-scalars-built-in die vernünftigste Wahl wäre wohl np.int64