NumPy: скалярные скаляры

Python

Введение

В языке Python определен только один тип определенного класса данных (например, только один целочисленный тип, один тип с плавающей запятой и т. д.). Это удобно в обычных приложениях, которым не нужно заботиться о том, как данные представлены на компьютере. Однако для научных вычислений нам нужен более точный тип управления.

В NumPy введено 24 новых скалярных типа Python для более точного описания данных. Эти типы можно использовать непосредственно в массивах в NumPy, поэтому они также называются скалярными типами Array.

Эта статья подробно объяснит эти 24 скалярных типа.

Иерархия скалярных типов

Сначала посмотрите на картинку и посмотрите на иерархию скалярного типа:

Сплошная линия вверху — это скалярный тип. Эти скалярные типы могут бытьnp.typeдля доступа, например:

In [130]: np.intc
Out[130]: numpy.int32

Осторожные друзья могут спросить, это неправильно, есть только 22 типа, обведенных сплошной линией, какие еще два типа?

Два других представляют целочисленные указатели.intpиuintp.

Обратите внимание, что тип скаляров массива неизменяем.

Мы можем использовать isinstance для обнаружения иерархии этих скаляров массива.

Например, isinstance(val, np.generic) вернет True, если val является скалярным объектом массива. isinstance(val, np.complexfloating) вернет True, если val является типом с комплексным значением.

Встроенный скалярный тип

Мы используем следующую таблицу, чтобы показать встроенные типы Scalar и соответствующие им типы C или типы Python. Код символа в последнем столбце — это символьное представление типа, которое используется в некоторых случаях, например при построении dtype.

boolean

тип описывать код символа
bool_ compatible: Python bool '?'
bool8 8 bits

Integers

тип описывать код символа
byte compatible: C char 'b'
short compatible: C short 'h'
intc compatible: C int 'i'
int_ compatible: Python int 'l'
longlong compatible: C long long 'q'
intp large enough to fit a pointer 'p'
int8 8 bits
int16 16 bits
int32 32 bits
int64 64 bits

Unsigned integers

тип описывать код символа
ubyte compatible: C unsigned char 'B'
ushort compatible: C unsigned short 'H'
uintc compatible: C unsigned int 'I'
uint compatible: Python int 'L'
ulonglong compatible: C long long 'Q'
uintp large enough to fit a pointer 'P'
uint8 8 bits
uint16 16 bits
uint32 32 bits
uint64 64 bits

Floating-point numbers

тип описывать код символа
half 'e'
single compatible: C float 'f'
double compatible: C double
float_ compatible: Python float 'd'
longfloat compatible: C long float 'g'
float16 16 bits
float32 32 bits
float64 64 bits
float96 96 bits, platform?
float128 128 bits, platform?

Complex floating-point numbers

тип описывать код символа
csingle 'F'
complex_ compatible: Python complex 'D'
clongfloat 'G'
complex64 two 32-bit floats
complex128 two 64-bit floats
complex192 two 96-bit floats, platform?
complex256 two 128-bit floats, platform?

Объект Python

тип описывать код символа
object_ any Python object 'O'

для типов объектов в массивахobject_Другими словами, сохраненные данные на самом деле являются ссылкой на объект Python, поэтому их типы объектов должны быть одинаковыми.

Хотя ссылка сохраняется, при обращении по значению возвращается сам объект.

Видно, что для числовых типов за int, uint, float, complex может следовать определенный массив, указывающий определенную длину.

intpиuintpдва указателя на целые числа.

Некоторые типы в основном эквивалентны типам, поставляемым с Python, и фактически эти типы унаследованы от типов, поставляемых с Python:

Array scalar type Related Python type
int_ IntType (Python 2 only)
float_ FloatType
complex_ ComplexType
bytes_ BytesType
unicode_ UnicodeType

Особым случаем является bool_, то же самое, что и в Python.BooleanTypeочень похоже, но не унаследовано отBooleanType. Потому что питонBooleanTypeНаследование не допускается. И базовая длина хранения данных у них тоже разная.

Хотя в Python bool является подклассом int. Но в NumPy bool_ нетint_подкласс ,bool_Даже числового типа.

В Питоне 3,int_больше не наследуется от Python3int, так какintбольше не является целым числом фиксированной длины.

Тип данных NumPy по умолчанию:float_.

тип данных переменной длины

Следующие три типа данных имеют переменную длину.

тип описывать код символа
bytes_ compatible: Python bytes 'S#'
unicode_ compatible: Python unicode/str 'U#'
void 'V#'

# в коде символа представляет число.

Коды символов, описанные выше, для совместимости с другими модулями Python, такими как struct, необходимо изменить следующим образом:

c -> S1, b -> B, 1 -> b, s -> h, w -> H, иu -> I.


Эта статья была включена вwoohoo.floydpress.com/03-python-вы…

Самая популярная интерпретация, самая глубокая галантерея, самые краткие уроки и множество трюков, о которых вы не знаете, ждут вас!

Добро пожаловать, чтобы обратить внимание на мой официальный аккаунт: «Программируйте эти вещи», разбирайтесь в технологиях, лучше поймите себя!