Введение
В языке 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-вы…
Самая популярная интерпретация, самая глубокая галантерея, самые краткие уроки и множество трюков, о которых вы не знаете, ждут вас!
Добро пожаловать, чтобы обратить внимание на мой официальный аккаунт: «Программируйте эти вещи», разбирайтесь в технологиях, лучше поймите себя!