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.
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)... Vrai Faux Faux Faux Faux Faux Faux Faux Vrai>>> 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.
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 :