2015-12-16 10 views
6

Jestem nowy w NumPy i SciPy. W przeciwieństwie do Matlab wygląda na to, że istnieje typ danych powiązany z każdą tablicą w NumPy.Poprawne parametry dla astype w NumPy

Załóżmy, że mamy tablicę liczb całkowitych x:

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

Jeśli chcę, aby przekształcić tablicę do pływaka, to wydaje się, że następujących prac:

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

Ale jestem nieco zaintrygowany, aby zobaczyć następujące działa również bez pojedynczych cudzysłowów.

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

Ale dla innych wyrażeń używanych do Y1 i Y2, jeśli pominąć pojedynczy cudzysłów, to nie działa:

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

Tak, jestem nieco zdezorientowany o pracach dlaczego Y4, ale y5 i y6 powodują błąd. Czy ktoś mógłby mnie o tym poinformować?

+0

Nie użyłem Matlaba, ale [sądząc po dokumentacji] (http://www.mathworks.com/help/matlab/numeric-types.html), wygląda na to, że macierze Matlab również mają dtypes. Po prostu zawsze domyślnie zmiennoprzecinkowa podwójna precyzja. – user2357112

Odpowiedz

5

Inne wyrażenia działają, wystarczy zaimportować typy z numpy. Nie musisz tego robić dla float, ponieważ jest to wbudowany typ dla Pythona.

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

Zarówno typu ciąg i typ wejścia typu są konwertowane na numpy.dtype obiektu wewnętrznie, czyli to, co widać, gdy za pomocą atrybutu ndarray.dtype.

1

czytanie dokumentacji astype:

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

Kiedy używasz float bez cudzysłowów, a następnie używasz dtype. Jeśli używasz "float", to używasz str.

float64 i float_ nie są dtypami w pythonie.

2

te 2 nie działają, ponieważ nie jest w przestrzeni roboczej, zmienne z tych nazw:

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

dostaję NameError: name 'float64' is not defined. Błąd jest generowany przez interpreter języka Python, zanim cokolwiek zostanie przekazane do metody x.astype.

Taki sam błąd wystąpiłby po wpisaniu float64 w Interpreter interakcyjny.

np.float64 działa, ponieważ istnieje taka zmienna w przestrzeni nazw np. To rzeczywiście jest klasa numpy.

float również działa. Jest to również klasa, podstawowy język Pythona (można go również wykorzystać jako funkcję, przekształcając ciąg lub liczbę w obiekt typu float).

"float64" to ciąg znaków, który rozumie się pod pojęciem astype, patrząc na coś w tabeli. (Mogłem to sprawdzić).

Z drugiej strony, jeśli dam astype coś losowy ciąg otrzymuję inny błąd

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

np.dtype('bar') daje ten sam błąd.

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

wszystkie zwracają ten sam obiekt dtype('float64').