<p>numpy.int64 n'est pas une instance de int</p>

Créé le 27 janv. 2013  ·  4Commentaires  ·  Source: numpy/numpy

Comme indiqué dans xlwt :

Voici un examen du comportement de numpy (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
>>>

On dirait que numpy a fait le travail pour rendre ses int32 et float64 reconnaissables par d'autres logiciels mais pas int64.

Proposal numpy.core

Commentaire le plus utile

C'est correct -- python 'int' est soit 32 ou 64 bits (selon votre
construire; vous utilisez un python 32 bits), donc soit np.int32 soit np.int64
en dérive. np.float32 n'est pas non plus une instance de 'float', car
de même, Python 'float' est spécifiquement stocké en double précision.

(Vraiment même c'est idiot parce que numpy ints _ne sont pas_ des instances de 'int'
ou « flotter », mais peu importe.)

isinstance(..., int) n'est pas le bon outil pour ce que vous essayez de faire. Si tu
voulez détecter des entiers en général en utilisant des types numpy, la chose la plus simple à
do isinstance(..., np.integer).

Le samedi 26 janvier 2013 à 20h15, Daniel Vianna [email protected] a écrit :

Comme indiqué dans xlwt https://github.com/python-excel/xlwt/issues/15 :

Voici un examen du comportement de numpy (Python 2.7.3, numpy 1.6.2)

import numpy>>> data = [t(123456) pour t dans (numpy.int32, numpy.int64, numpy.float64)]>>> [type(d) pour d dans data][,,]>>> data[123456, 123456, 123456.0]>>> check_types = (int, long, float)>>> pour d dans data :... pour c dans check_types :... print type(d), repr(c), isinstance(d, c)...VraiFauxFauxFauxFauxFauxFauxFauxVrai>>>

On dirait que numpy a fait le travail pour faire ses int32 et float64
reconnaissable par d'autres logiciels mais pas int64.

-
Répondez directement à cet e-mail ou consultez-le sur Gi tHubhttps://github.com/numpy/numpy/issues/2951.

Tous les 4 commentaires

C'est correct -- python 'int' est soit 32 ou 64 bits (selon votre
construire; vous utilisez un python 32 bits), donc soit np.int32 soit np.int64
en dérive. np.float32 n'est pas non plus une instance de 'float', car
de même, Python 'float' est spécifiquement stocké en double précision.

(Vraiment même c'est idiot parce que numpy ints _ne sont pas_ des instances de 'int'
ou « flotter », mais peu importe.)

isinstance(..., int) n'est pas le bon outil pour ce que vous essayez de faire. Si tu
voulez détecter des entiers en général en utilisant des types numpy, la chose la plus simple à
do isinstance(..., np.integer).

Le samedi 26 janvier 2013 à 20h15, Daniel Vianna [email protected] a écrit :

Comme indiqué dans xlwt https://github.com/python-excel/xlwt/issues/15 :

Voici un examen du comportement de numpy (Python 2.7.3, numpy 1.6.2)

import numpy>>> data = [t(123456) pour t dans (numpy.int32, numpy.int64, numpy.float64)]>>> [type(d) pour d dans data][,,]>>> data[123456, 123456, 123456.0]>>> check_types = (int, long, float)>>> pour d dans data :... pour c dans check_types :... print type(d), repr(c), isinstance(d, c)...VraiFauxFauxFauxFauxFauxFauxFauxVrai>>>

On dirait que numpy a fait le travail pour faire ses int32 et float64
reconnaissable par d'autres logiciels mais pas int64.

-
Répondez directement à cet e-mail ou consultez-le sur Gi tHubhttps://github.com/numpy/numpy/issues/2951.

De plus, sur Python 3, aucun des types entiers de Numpy n'est lié au type int natif (qui est un entier de taille variable).

Je pense que Nathaniel a tout à fait raison dans sa note sur le rapport original. Numpy devrait hériter/enregistrer numbers.Integral etc., ce qui s'intègre bien dans la suppression de python 2.4 et 2.5. Si quelqu'un veut une large reconnaissance des goûts entiers, il devrait vérifier numbers.Integral (ou peut-être essayer la méthode similaire en tapant __index__ ) de toute façon.

À partir de #4547 et 1.9.0, numpy enregistre les nombres avec le module numérique. Clôturer ceci comme connexe.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

kevinzhai80 picture kevinzhai80  ·  4Commentaires

Foadsf picture Foadsf  ·  3Commentaires

toddrjen picture toddrjen  ·  4Commentaires

MareinK picture MareinK  ·  3Commentaires

keithbriggs picture keithbriggs  ·  3Commentaires