Допустимые параметры для astype в NumPy
Я новичок в NumPy и SciPy. В отличие от Matlab, кажется, что есть тип данных, связанный с каждым массивом в NumPy.
предположим, что у нас есть целочисленный массив x
:
import numpy as np
x = np.array([1, 2, 3])
если я хочу преобразовать массив в float, то, похоже, работает следующее:
y1 = x.astype('float64') # Works!
y2 = x.astype('float_') # Works!
y3 = x.astype('float') # Works!
но я несколько озадачен тем, что следующее также работает без одинарных кавычек.
y4 = x.astype(float) # Still works!!
но для других выражений, используемых для y1 и y2, если Я опускаю одинарную кавычку, она не работает:
y5 = x.astype(float64) # Doesn't work.
y6 = x.astype(float_) # Doesn't work.
Итак, я несколько смущен тем, почему Y4 работает, но y5 и y6 вызывают ошибку. Может, кто-нибудь просветит меня на этот счет?
3 ответов
другие выражения работают, вам просто нужно импортировать типы из numpy. Вам не нужно делать это для float
потому что это встроенный тип для Python.
y5 = x.astype(np.float64)
y6 = x.astype(np.float_)
как строковые, так и типовые входы преобразуются в numpy.dtype
объект внутренне, что вы видите при использовании .
эти 2 не работают, потому что в вашем рабочем пространстве нет переменных с этими именами:
y5 = x.astype(float64) # Doesn't work.
y6 = x.astype(float_) # Doesn't work.
Я NameError: name 'float64' is not defined
. Ошибка создается интерпретатором Python, прежде чем что-либо передается x.astype
метод.
вы получите ту же ошибку, если просто наберете float64
в интерактивном интерпретаторе.
np.float64
работает, потому что есть такая Переменная в np
пространство имен. Это на самом деле numpy класс.
float
тоже работает. Это тоже класс, базовый Python (он также может использоваться как функция, преобразующая строку или число в объект float).
'float64' - это строка, это astype
понимает, видимо, ища что-то в таблице. (Я мог бы посмотреть это).
С другой стороны, если я даю astype
что-то случайная строка я получаю другую ошибку
In [967]: A.astype('bar')
...
TypeError: data type "bar" not understood
np.dtype('bar')
дает ту же ошибку.
np.dtype(float)
np.dtype('float64')
np.dtype('float')
все вернется той же
чтение документации astype
:
dtype : str or dtype
Typecode or data-type to which the array is cast.
когда вы используете float
без кавычек, то вы используете dtype.
Когда вы используете "float"
, тогда вы используете str.
float64
и float_
не являются dtypes в python.