web-dev-qa-db-fra.com

Comment convertir un tableau 2D float numpy en un tableau 2D int numpy?

Comment convertir un tableau numpy réel en tableau numpy int? J'ai essayé d'utiliser la carte directement pour la mettre en réseau, mais cela n'a pas fonctionné.

252
Shan

Utilisez la méthode astype .

>>> x = np.array([[1.0, 2.3], [1.3, 2.9]])
>>> x
array([[ 1. ,  2.3],
       [ 1.3,  2.9]])
>>> x.astype(int)
array([[1, 2],
       [1, 2]])
339
BrenBarn

Quelques fonctions numériques pour contrôler l'arrondi: rint , étage , trunc , ceil . en fonction de la manière dont vous souhaitez arrondir les flotteurs, vers le haut, le bas ou le plus proche.

>>> x = np.array([[1.0,2.3],[1.3,2.9]])
>>> x
array([[ 1. ,  2.3],
       [ 1.3,  2.9]])
>>> y = np.trunc(x)
>>> y
array([[ 1.,  2.],
       [ 1.,  2.]])
>>> z = np.ceil(x)
>>> z
array([[ 1.,  3.],
       [ 2.,  3.]])
>>> t = np.floor(x)
>>> t
array([[ 1.,  2.],
       [ 1.,  2.]])
>>> a = np.rint(x)
>>> a
array([[ 1.,  2.],
       [ 1.,  3.]])

Pour faire un de ceci dans int, ou un des autres types de numpy, astype (comme l'a répondu BrenBern):

a.astype(int)
array([[1, 2],
       [1, 3]])

>>> y.astype(int)
array([[1, 2],
       [1, 2]])
56
fhtuft

Si vous n'êtes pas sûr que votre entrée sera un tableau Numpy, vous pouvez utiliser asarray avec dtype=int au lieu de astype:

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

Si le tableau d'entrée a déjà le bon type, asarray évite la copie du tableau alors que astype ne le fait pas (sauf si vous spécifiez copy=False):

>>> a = np.array([1,2,3,4])
>>> a is np.asarray(a)  # no copy :)
True
>>> a is a.astype(int)  # copy :(
False
>>> a is a.astype(int, copy=False)  # no copy :)
True
10
1''

vous pouvez utiliser np.int_:

>>> x = np.array([[1.0, 2.3], [1.3, 2.9]])
>>> x
array([[ 1. ,  2.3],
       [ 1.3,  2.9]])
>>> np.int_(x)
array([[1, 2],
       [1, 2]])
10
Hackaholic