Come modificare il formato dati di un array in python
Per cambiare il formato dei dati in un array in Python, copio la variabile con la funzione array() di numpy, indicando il nuovo tipo di dati nell'attributo dtype.
y= np.array(x, dtype=tipo)
oppure il metodo astype.
y= x.astype(tipo)
- x è l'array di partenza, un vettore o una matrice, già esistente.
- y è il nuovo array, conterrà i dati di x convertiti nel nuovo formato.
- dtype è l'attributo usato nella funzione array() per indicare il nuovo tipo di dati ( int, uint, float, complex, bool ). Nel metodo astype, invece, devo indicare il tipo di dati tra parentesi.
Nota. Nel linguaggio Python gli array si distinguono dalle liste. Gli array devono essere strutture omogenee, possono contenere soltanto elementi dello stesso tipo. Le liste, invece, possono contenere anche elementi di diverso formato.
Un esempio pratico
Esempio 1
Creo un vettore con tre numeri interi con la funzione array() della libreria numpy.
import numpy as np
v=np.array([1,2,3])
Il vettore contiene tre numeri interi.
Per vedere il tipo di dati uso il metodo dtype
>>> v.dtype
dtype('int32')
Ora voglio convertire l'array in numeri a virgola mobile.
Copio il vettore v con la funzione array() indicando float nell'attributo dtype.
Assegno la copia alla variabile w.
w=np.array(v, dtype=float)
Il vettore w ha gli stessi elementi di v ma in virgola mobile.
Negli elementi dell'array ci sono i numeri con il punto decimale.
>>> w
array([1., 2., 3.])
Per verificare il nuovo formato dei dati, uso di nuovo il metodo dtype
Questa volta però lo uso sulla variabile w.
>>> w.dtype
dtype('float64')
Il vettore w è in formato a virgola mobile (float) a 64 bit.
Esempio 2
Posso ottenere lo stesso risultato con il metodo astype.
w=v.astype(float)
In questo caso ho creato una copia del vettore (v) usando un altro vettore (w).
Ho così mantenuto in memoria entrambi i vettori.
>>> v
array([1, 2, 3])
>>> w
array([1., 2., 3.])
Avrei comunque potuto copiare il vettore (v) anche su se stesso (v).
v=v.astype(float)
E così via.