2015-12-16 14 views
6

Sono nuovo di NumPy e SciPy. A differenza di Matlab, sembra che ci sia un tipo di dati associato a ciascun array in NumPy.Parametri validi per astype in NumPy

Supponiamo di avere una matrice intera x:

import numpy as np 
x = np.array([1, 2, 3]) 

Se voglio convertire l'array in float, quindi sembra che le seguenti opere:

y1 = x.astype('float64') # Works! 
y2 = x.astype('float_') # Works! 
y3 = x.astype('float') # Works! 

Ma io sono un po ' perplesso vedere quanto segue funziona anche senza le virgolette singole.

y4 = x.astype(float)  # Still works!! 

Ma per altre espressioni usate per Y1 e Y2, se tralascio le virgolette singole, non funziona:

y5 = x.astype(float64) # Doesn't work. 
y6 = x.astype(float_) # Doesn't work. 

Quindi, io sono un po 'confuso su opere perché Y4, ma y5 e y6 causano un errore. Qualcuno potrebbe illuminarmi su questo?

+0

Non ho usato Matlab, ma [a giudicare dalla documentazione] (http://www.mathworks.com/help/matlab/numeric-types.html), sembra che anche gli array Matlab abbiano dtypes. Hanno sempre un valore predefinito in virgola mobile a precisione doppia. – user2357112

risposta

5

Le altre espressioni funzionano, è sufficiente importare i tipi da numpy. Non è necessario eseguire questa operazione per float perché è un tipo predefinito per Python.

y5 = x.astype(np.float64) 
y6 = x.astype(np.float_) 

Sia il tipo stringa e ingressi tipo di tipo vengono convertiti in un oggetto numpy.dtype internamente, che è quello che si vede quando si utilizza l'attributo ndarray.dtype.

1

lettura della documentazione di astype:

dtype : str or dtype 
    Typecode or data-type to which the array is cast. 

Quando si utilizza float senza virgolette, allora si sta utilizzando DTYPE. Quando si utilizza "float", quindi si utilizza str.

float64 e float_ non sono dtypes in python.

2

Questi 2 non funzionano perché non c'è, nello spazio di lavoro, variabili con questi nomi:

y5 = x.astype(float64) # Doesn't work. 
y6 = x.astype(float_) # Doesn't work. 

ho un NameError: name 'float64' is not defined. L'errore viene generato dall'interprete Python, prima che venga passato qualcosa al metodo x.astype.

Avresti lo stesso errore se hai appena inserito float64 nell'interprete interattivo.

np.float64 funziona perché c'è una tale variabile nello spazio dei nomi np. In realtà è una classe numpy.

float funziona anche. Anch'esso è una classe, una base Python (può anche essere usata come una funzione, convertendo una stringa o un numero in un oggetto float).

'float64' è una stringa, che astype comprende, probabilmente cercando qualcosa in una tabella. (Potrei dare un'occhiata).

D'altra parte se io do una cosa astype stringa casuale ottengo un errore diverso

In [967]: A.astype('bar') 
... 
TypeError: data type "bar" not understood 

np.dtype('bar') dà lo stesso errore.

np.dtype(float) 
np.dtype('float64') 
np.dtype('float') 

tutti restituiscono lo stesso oggetto dtype('float64').

Problemi correlati