<p>numpy.int64 ist keine Instanz von int</p>

Erstellt am 27. Jan. 2013  ·  4Kommentare  ·  Quelle: numpy/numpy

Wie in xlwt berichtet:

Hier ist eine Untersuchung von numpy Verhalten (Python 2.7.3, numpy 1.6.2)

>>> import numpy
>>> data = [t(123456) for t in (numpy.int32, numpy.int64, numpy.float64)]
>>> [type(d) for d in data]
[<type 'numpy.int32'>, <type 'numpy.int64'>, <type 'numpy.float64'>]
>>> data
[123456, 123456, 123456.0]
>>> check_types = (int, long, float)
>>> for d in data:
...     for c in check_types:
...         print type(d), repr(c), isinstance(d, c)
...
<type 'numpy.int32'> <type 'int'> True
<type 'numpy.int32'> <type 'long'> False
<type 'numpy.int32'> <type 'float'> False
<type 'numpy.int64'> <type 'int'> False
<type 'numpy.int64'> <type 'long'> False
<type 'numpy.int64'> <type 'float'> False
<type 'numpy.float64'> <type 'int'> False
<type 'numpy.float64'> <type 'long'> False
<type 'numpy.float64'> <type 'float'> True
>>>

Sieht so aus, als hätte numpy die Arbeit geleistet, um seine int32 und float64 für andere Software, aber nicht für int64, erkennbar zu machen.

Proposal numpy.core

Hilfreichster Kommentar

Dies ist richtig - Python 'int' ist entweder 32 oder 64 Bit (je nach Ihrem
bauen; Sie verwenden ein 32-Bit-Python), also entweder np.int32 oder np.int64
leitet sich daraus ab. np.float32 ist auch keine Instanz von 'float', weil
ähnlich wird Python 'float' speziell mit doppelter Genauigkeit gespeichert.

(Wirklich sogar das ist albern, weil numpy ints _keine_ Instanzen von 'int' sind
oder 'schweben', aber was auch immer.)

isinstance(..., int) ist das falsche Werkzeug für das, was Sie versuchen. wenn du
Ganzzahlen im Allgemeinen mit numpy-Typen erkennen möchten, das Einfachste,
do is isinstance(..., np.integer).

Am Sa, 26. Januar 2013 um 20:15 Uhr schrieb Daniel Vianna [email protected] :

Wie in xlwt https://github.com/python-excel/xlwt/issues/15 berichtet :

Hier ist eine Untersuchung von numpy Verhalten (Python 2.7.3, numpy 1.6.2)

import numpy>>> data = [t(123456) for t in (numpy.int32, numpy.int64, numpy.float64)]>>> [type(d) for d in data][,,]>>> data[123456, 123456, 123456.0]>>> check_types = (int, long, float)>>> für d in data:... für c in check_types :... print type(d), repr(c), isInstanz(d, c)...WahrFalschFalschFalschFalschFalschFalschFalschRichtig>>>

Sieht so aus, als hätte Numpy die Arbeit geleistet, um int32 und float64 zu machen
von anderer Software erkennbar, aber nicht int64.


Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf Gi tHub an

Alle 4 Kommentare

Dies ist richtig - Python 'int' ist entweder 32 oder 64 Bit (je nach Ihrem
bauen; Sie verwenden ein 32-Bit-Python), also entweder np.int32 oder np.int64
leitet sich daraus ab. np.float32 ist auch keine Instanz von 'float', weil
ähnlich wird Python 'float' speziell mit doppelter Genauigkeit gespeichert.

(Wirklich sogar das ist albern, weil numpy ints _keine_ Instanzen von 'int' sind
oder 'schweben', aber was auch immer.)

isinstance(..., int) ist das falsche Werkzeug für das, was Sie versuchen. wenn du
Ganzzahlen im Allgemeinen mit numpy-Typen erkennen möchten, das Einfachste,
do is isinstance(..., np.integer).

Am Sa, 26. Januar 2013 um 20:15 Uhr schrieb Daniel Vianna [email protected] :

Wie in xlwt https://github.com/python-excel/xlwt/issues/15 berichtet :

Hier ist eine Untersuchung von numpy Verhalten (Python 2.7.3, numpy 1.6.2)

import numpy>>> data = [t(123456) for t in (numpy.int32, numpy.int64, numpy.float64)]>>> [type(d) for d in data][,,]>>> data[123456, 123456, 123456.0]>>> check_types = (int, long, float)>>> für d in data:... für c in check_types :... print type(d), repr(c), isInstanz(d, c)...WahrFalschFalschFalschFalschFalschFalschFalschRichtig>>>

Sieht so aus, als hätte Numpy die Arbeit geleistet, um int32 und float64 zu machen
von anderer Software erkennbar, aber nicht int64.


Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf Gi tHub an

Außerdem ist in Python 3 keiner der Integer-Typen von Numpy mit dem nativen int-Typ (der eine Ganzzahl variabler Größe ist) verwandt.

Ich denke, Nathaniel hat mit seiner Anmerkung zum Originalbericht völlig Recht. Numpy sollte numbers.Integral usw. erben/registrieren, was gut in das Ablegen von Python 2.4 und 2.5 passt. Wenn jemand eine breite Anerkennung von Integer-Likes wünscht, sollte er auf jeden Fall nach numbers.Integral suchen (oder vielleicht die ähnliche Enten-Eingabe-Methode __index__ ausprobieren).

Ab #4547 und 1.9.0 registriert numpy Zahlen mit dem Zahlenmodul. Schließen Sie dies im Zusammenhang.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen