Допустимые параметры для 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.