web-dev-qa-db-fra.com

Conversion de ndarray de float64 en entier

J'ai un ndarray dans python avec un dtype de float64. Je voudrais convertir le tableau en tableau Comment devrais-je faire cela?

int() ne fonctionnera pas, car il dit qu'il ne peut pas le convertir en scalaire. Changer le champ dtype lui-même ne fonctionne évidemment pas, car les octets réels n'ont pas changé. Je n'arrive pas à trouver quoi que ce soit sur Google ou dans la documentation. Quelle est la meilleure façon de le faire?

43
robintw

Utilisation .astype.

>>> a = numpy.array([1, 2, 3, 4], dtype=numpy.float64)
>>> a
array([ 1.,  2.,  3.,  4.])
>>> a.astype(numpy.int64)
array([1, 2, 3, 4])

Voir le documentation pour plus d'options.

62
kennytm

Il existe également une discussion très utile sur la conversion du tableau à la place, Conversion de type à la place d'un tableau NumPy . Si vous êtes préoccupé par la copie de votre tableau (ce que fait astype()]), vérifiez le lien.

6
benjaminmgross

Bien que astype soit probablement la "meilleure" option, il existe plusieurs autres moyens de le convertir en tableau entier. J'utilise ce arr dans les exemples suivants:

>>> import numpy as np
>>> arr = np.array([1,2,3,4], dtype=float)
>>> arr
array([ 1.,  2.,  3.,  4.])

Le int* fonctions de NumPy

>>> np.int64(arr)
array([1, 2, 3, 4])

>>> np.int_(arr)
array([1, 2, 3, 4])

Le NumPy *array fonctionne eux-mêmes:

>>> np.array(arr, dtype=int)
array([1, 2, 3, 4])

>>> np.asarray(arr, dtype=int)
array([1, 2, 3, 4])

>>> np.asanyarray(arr, dtype=int)
array([1, 2, 3, 4])

La méthode astype (qui a déjà été mentionnée mais pour des raisons de complétude):

>>> arr.astype(int)
array([1, 2, 3, 4])

Notez que le fait de passer int en tant que type type à astype ou array donnera par défaut un type entier par défaut qui dépend de votre plate-forme. Par exemple, sous Windows, il s'agira de int32, sur Linux 64 bits avec 64 bits Python c'est int64. Si vous avez besoin d'un type entier spécifique et que vous souhaitez éviter "l'ambiguïté" de la plate-forme, vous devez utiliser les types NumPy correspondants, tels que np.int32 ou np.int64.

6
MSeifert