Spec-Zone.ru › NumPy 1.20

Скаляры

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

В NumPy существует 24 новых фундаментальных типа Python для описания различных типов скаляров. Эти описатели типов в основном основаны на типах, доступных в языке C, на котором написан CPython, с несколькими дополнительными типами, совместимыми с типами Python.

Скаляры массивов имеют те же атрибуты и методы, что и ndarrays. 1 Это позволяет рассматривать элементы массива частично на одном уровне с массивами, сглаживая острые углы, возникающие при смешивании скалярных и массивов операций.

Скаляры массивов находятся в иерархии (см. рисунок ниже) типов данных. Их можно обнаружить, используя иерархию: Например, isinstance(val, np.generic) вернёт True, если val — объект скаляра массива. В качестве альтернативы, можно определить тип присутствующего скаляра массива, используя другие члены иерархии типов данных. Таким образом, например, isinstance(val, np.complexfloating) вернёт True, если val — тип комплексного значения, а isinstance(val, np.flexible) вернёт true, если val — один из типов массивов с гибким размером элементов (str_, bytes_, void).

../_images/dtype-hierarchy.png

Рисунок: Иерархия объектов типов, представляющих типы данных массивов. Не показаны два целочисленных типа intp и uintp, которые просто указывают на целочисленный тип, хранящий указатель для платформы. Все числовые типы также можно получить, используя имена с указанием разрядности.

1

Однако скаляры массивов неизменяемы, поэтому ни один из атрибутов скаляра массива не может быть изменён.

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

Встроенные типы скаляров показаны ниже. Имена в стиле C связаны с кодами символов, которые показаны в их описаниях. Однако использование кодов символов не рекомендуется.

Некоторые типы скаляров по существу эквивалентны фундаментальным типам Python и поэтому наследуют их, а также общий тип скаляра массива:

Тип скаляра массива

Связанный тип Python

Наследует?

int_

int

Только Python 2

float_

float

да

complex_

complex

да

bytes_

bytes

да

str_

str

да

bool_

bool

нет

datetime64

datetime.datetime

нет

timedelta64

datetime.timedelta

нет

Тип данных bool_ очень похож на Python bool, но не наследуется от него, потому что Python bool не позволяет наследоваться от себя, а на уровне C размер фактических данных bool не такой же, как у скалярного значения Python Boolean.

Предупреждение

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

Подсказка

По умолчанию тип данных в NumPy — float_.

class numpy.generic [source]

Базовый класс для типов NumPy скаляров.

Класс, от которого происходят большинство (все?) типов скаляров NumPy. Для согласованности, экспонирует тот же API, что и ndarray, несмотря на то, что многие последующие атрибуты являются либо «только для чтения», либо совершенно нерелевантными. Это класс, от которого, по всей видимости, пользователи должны наследовать пользовательские типы скаляров.

class numpy.number [source]

Абстрактный базовый класс всех числовых типов скаляров.

Целочисленные типы

class numpy.integer [source]

Абстрактный базовый класс всех целочисленных типов скаляров.

Типы целых со знаком

class numpy.signedinteger [source]

Абстрактный базовый класс всех целочисленных типов скаляров со знаком.

class numpy.byte [source]

Целочисленный тип со знаком, совместимый с C char.

Код символа

'b'

Псевдоним на этой платформе

numpy.int8: 8-битное целое со знаком (-128 до 127).

class numpy.short [source]

Целочисленный тип со знаком, совместимый с C short.

Код символа

'h'

Псевдоним на этой платформе

numpy.int16: 16-битное целое со знаком (-32_768 до 32_767).

class numpy.intc [source]

Целочисленный тип со знаком, совместимый с C int.

Код символа

'i'

Псевдоним на этой платформе

numpy.int32: 32-битное целое со знаком (-2_147_483_648 до 2_147_483_647).

END_OF_DOCUMENT_MARKER
class numpy.int_ [source]

Целочисленный тип со знаком, совместимый с Python int и C long.

Код символа

'l'

Псевдоним на этой платформе

numpy.int64: 64-битное целое со знаком (-9_223_372_036_854_775_808 до 9_223_372_036_854_775_807).

Псевдоним на этой платформе

numpy.intp: Целое со знаком, достаточно большое, чтобы вместить указатель, совместимый с C intptr_t.

class numpy.longlong [source]

Целочисленный тип со знаком, совместимый с C long long.

Код символа

'q'

Целочисленные типы без знака

class numpy.unsignedinteger [source]

Абстрактный базовый класс всех целочисленных скалярных типов без знака.

class numpy.ubyte [source]

Целочисленный тип без знака, совместимый с C unsigned char.

Код символа

'B'

Псевдоним на этой платформе

numpy.uint8: 8-битное целое без знака (0 до 255).

class numpy.ushort [source]

Целочисленный тип без знака, совместимый с C unsigned short.

Код символа

'H'

Псевдоним на этой платформе

numpy.uint16: 16-битное целое без знака (0 до 65_535).

class numpy.uintc [source]

Целочисленный тип без знака, совместимый с C unsigned int.

Код символа

'I'

Псевдоним на этой платформе

numpy.uint32: 32-битное целое без знака (0 до 4_294_967_295).

class numpy.uint [source]

Целочисленный тип без знака, совместимый с C unsigned long.

Код символа

'L'

Псевдоним на этой платформе

numpy.uint64: 64-битное целое без знака (0 до 18_446_744_073_709_551_615).

Псевдоним на этой платформе

numpy.uintp: Целое без знака, достаточно большое, чтобы вместить указатель, совместимый с C uintptr_t.

class numpy.ulonglong [source]

Целочисленный тип со знаком, совместимый с C unsigned long long.

Код символа

'Q'

Вещественные типы

class numpy.inexact [source]

Абстрактный базовый класс всех числовых скалярных типов с (возможно) неточным представлением значений в их диапазоне, таких как числа с плавающей точкой.

Типы с плавающей точкой

class numpy.floating [source]

Абстрактный базовый класс всех скалярных типов с плавающей точкой.

class numpy.half [source]

Тип числа с плавающей точкой половинной точности.

Код символа

'e'

Псевдоним на этой платформе

numpy.float16: тип числа с плавающей точкой 16-битной точности: бит знака, 5 бит экспоненты, 10 бит мантиссы.

class numpy.single [source]

Тип числа с плавающей точкой одинарной точности, совместимый с C float.

Код символа

'f'

Псевдоним на этой платформе

numpy.float32: тип числа с плавающей точкой 32-битной точности: бит знака, 8 бит экспоненты, 23 бита мантиссы.

class numpy.double [source]

Тип числа с плавающей точкой двойной точности, совместимый с Python float и C double.

Код символа

'd'

Псевдоним

numpy.float_

Псевдоним на этой платформе

numpy.float64: тип числа с плавающей точкой 64-битной точности: бит знака, 11 бит экспоненты, 52 бита мантиссы.

class numpy.longdouble [source]

Тип числа с плавающей точкой расширенной точности, совместимый с C long double , но не обязательно с IEEE 754 четверной точности.

Код символа

'g'

Псевдоним

numpy.longfloat

Псевдоним на этой платформе

numpy.float128: тип числа с плавающей точкой расширенной 128-битной точности.

Комплексные типы с плавающей точкой

class numpy.complexfloating [source]

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

class numpy.csingle [source]

Тип комплексного числа, состоящий из двух чисел с плавающей точкой одинарной точности.

Код символа

'F'

Псевдоним

numpy.singlecomplex

Псевдоним на этой платформе

numpy.complex64: Тип комплексного числа, состоящий из 2 чисел с плавающей точкой 32-битной точности.

class numpy.cdouble [source]

Тип комплексного числа, составленный из двух чисел с плавающей точкой двойной точности, совместимый с Python complex.

Код символа

'D'

Псевдоним

numpy.cfloat

Псевдоним

numpy.complex_

Псевдоним на этой платформе

numpy.complex128: Тип комплексного числа, составленный из 2 чисел с плавающей точкой 64-битной точности.

class numpy.clongdouble [source]

Тип комплексного числа, составленный из двух чисел с плавающей точкой расширенной точности.

Код символа

'G'

Псевдоним

numpy.clongfloat

Псевдоним

numpy.longcomplex

Псевдоним на этой платформе

numpy.complex256: Тип комплексного числа, составленный из 2 чисел с плавающей точкой 128-битной расширенной точности.

Другие типы

class numpy.bool_ [source]

Булевый тип (True или False), хранится как байт.

Предупреждение

Тип bool_ не является подклассом типа int_ (тип bool_ даже не является числовым типом). Это отличается от стандартной реализации Python bool в качестве подкласса int.

Код символа

'?'

Псевдоним

numpy.bool8

class numpy.datetime64 [source]

Дата и время, хранящиеся как 64-битное целое число, отсчитываемое от 1970-01-01T00:00:00.

>>> np.datetime64(10, 'Y')
numpy.datetime64('1980')
>>> np.datetime64(10, 'D')
numpy.datetime64('1970-01-11')

См. Даты и временные интервалы для получения дополнительной информации.

Код символа

'M'

class numpy.timedelta64 [source]

Временной интервал, хранящийся как 64-битное целое число.

См. Даты и временные интервалы для получения дополнительной информации.

Код символа

'm'

class numpy.object_ [source]

Любой объект Python.

Код символа

'O'

Примечание

Данные, фактически хранящиеся в массивах объектов (т.е., массивах с типом данных object_), являются ссылками на объекты Python, а не на сами объекты. Следовательно, массивы объектов ведут себя больше как обычные Python lists, в том смысле, что их содержимое не обязательно должно быть одного типа Python.

Тип объекта также является особым, потому что массив, содержащий элементы object_, не возвращает объект object_ при доступе к элементу, а вместо этого возвращает фактический объект, на который ссылается элемент массива.

Следующие типы данных являются гибкими: у них нет предварительно определенного размера, и данные, которые они описывают, могут иметь различную длину в различных массивах. (В кодах символов # — целое число, обозначающее количество элементов, из которых состоит тип данных.)

class numpy.flexible [source]

Абстрактный базовый класс всех типов скаляров без предварительно определенной длины. Фактический размер этих типов зависит от конкретной np.dtype инстанциации.

class numpy.bytes_ [source]

Строка байтов.

При использовании в массивах этот тип удаляет завершающие нулевые байты.

Код символа

'S'

Псевдоним

numpy.string_

class numpy.str_ [source]

Строка Юникод.

При использовании в массивах этот тип удаляет завершающие нулевые кодовые точки.

В отличие от встроенной str, это поддерживает Протокол буфера, экспонируя его содержимое как UCS4:

>>> m = memoryview(np.str_("abc"))
>>> m.format
'3w'
>>> m.tobytes()
b'a\x00\x00\x00b\x00\x00\x00c\x00\x00\x00'
Код символа

'U'

Псевдоним

numpy.unicode_

class numpy.void [source]

Либо непрозрачная последовательность байтов, либо структура.

>>> np.void(b'abcd')
void(b'\x61\x62\x63\x64')

Скаляры структурированных void могут быть созданы только путем извлечения из Структурированных массивов:

>>> arr = np.array((1, 2), dtype=[('x', np.int8), ('y', np.int8)])
>>> arr[()]
(1, 2)  # looks like a tuple, but is `np.void`
Код символа

'V'

Предупреждение

См. Примечание по строковым типам.

Числовая совместимость: если вы использовали старые символы кодов типов в своем коде Numeric (что никогда не рекомендовалось), вам необходимо изменить некоторые из них на новые символы. В частности, необходимые изменения — c -> S1, b -> B, 1 -> b, s -> h, w -> H, и u -> I. Эти изменения делают соглашение о символах типов более согласованным с другими модулями Python, такими как модуль struct.

Псевдонимы фиксированного размера

Вместе с их (в основном) производными от C именами, целочисленные, вещественные и комплексные типы данных также доступны с использованием соглашения о ширине бита, чтобы всегда гарантировать массив нужного размера. Также предоставляются два псевдонима (numpy.intp и numpy.uintp), указывающие на целочисленный тип, достаточно большой для хранения указателя C.

numpy.bool8 [source]

Псевдоним numpy.bool_

numpy.int8 [source]
numpy.int16
numpy.int32
numpy.int64

Псевдонимы для целых типов со знаком (один из numpy.byte, numpy.short, numpy.intc, numpy.int_ и numpy.longlong) с указанным количеством бит.

Совместимы со спецификацией C99 int8_t, int16_t, int32_t, и int64_t, соответственно.

numpy.uint8 [source]
numpy.uint16
numpy.uint32
numpy.uint64

Псевдоним для беззнаковых целых типов (один из numpy.byte, numpy.short, numpy.intc, numpy.int_ и numpy.longlong) с указанным количеством бит.

Совместимы со спецификацией C99 uint8_t, uint16_t, uint32_t, и uint64_t, соответственно.

numpy.intp [source]

Псевдоним для целого типа со знаком (один из numpy.byte, numpy.short, numpy.intc, numpy.int_ и np.longlong) размером с указатель.

Совместим со спецификацией C intptr_t.

Код символа

'p'

numpy.uintp [source]

Псевдоним для беззнакового целого типа (один из numpy.byte, numpy.short, numpy.intc, numpy.int_ и np.longlong) размером с указатель.

Совместим со спецификацией C uintptr_t.

Код символа

'P'

numpy.float16 [source]

Псевдоним numpy.half

numpy.float32 [source]

Псевдоним numpy.single

numpy.float64 [source]

Псевдоним numpy.double

numpy.float96
numpy.float128 [source]

Псевдоним numpy.longdouble, название по размеру в битах. Существование этих псевдонимов зависит от платформы.

numpy.complex64 [source]

Псевдоним numpy.csingle

numpy.complex128 [source]

Псевдоним numpy.cdouble

numpy.complex192
numpy.complex256 [source]

Псевдоним numpy.clongdouble, название по размеру в битах. Существование этих псевдонимов зависит от платформы.

Другие псевдонимы

Первые два из них – удобные псевдонимы, похожие по названию на встроенные типы, аналогично bool_, int_, str_, bytes_ и object_:

numpy.float_ [source]

Псевдоним numpy.double

numpy.complex_ [source]

Псевдоним numpy.cdouble

Некоторые другие используют альтернативную систему именования для расширенных типов чисел с плавающей запятой и комплексных чисел:

numpy.longfloat [source]

Псевдоним numpy.longdouble

numpy.singlecomplex [source]

Псевдоним numpy.csingle

numpy.cfloat [source]

Псевдоним numpy.cdouble

numpy.longcomplex [source]

Псевдоним numpy.clongdouble

numpy.clongfloat [source]

Псевдоним numpy.clongdouble

Следующие псевдонимы происходят из Python 2, и рекомендуется не использовать их в новом коде.

numpy.string_ [source]

Псевдоним numpy.bytes_

numpy.unicode_ [source]

Псевдоним numpy.str_

Атрибуты

Массивные скалярные объекты имеют array priority значение NPY_SCALAR_PRIORITY (-1 000 000.0). У них также (пока) нет атрибута ctypes. В остальном они обладают теми же атрибутами, что и массивы:

generic.flags

Целочисленное значение флагов.

generic.shape

Кортеж измерений массива.

generic.strides

Кортеж шагов в байтах по каждому измерению.

generic.ndim

Количество измерений массива.

generic.data

Указатель на начало данных.

generic.size

Количество элементов в элементе типа.

generic.itemsize

Длина одного элемента в байтах.

generic.base

Скалярный атрибут, идентичный соответствующему атрибуту массива.

generic.dtype

Получение описателя данных массива.

generic.real

Вещественная часть скаляра.

generic.imag

Мнимая часть скаляра.

generic.flat

Одномерный вид скаляра.

generic.T

Скалярный атрибут, идентичный соответствующему атрибуту массива.

generic.__array_interface__

Протокол массива: сторона Python

generic.__array_struct__

Протокол массива: структура

generic.__array_priority__

Приоритет массива.

generic.__array_wrap__

sc.__array_wrap__(obj) возвращает скаляр из массива

Индексирование

См. также

Индексирование, Объекты типов данных (dtype)

Массивные скаляры можно индексировать как массивы нулевой размерности: если x — массивный скаляр,

  • x[()] возвращает копию массивного скаляра
  • x[...] возвращает массив нулевой размерности ndarray
  • x['field-name'] возвращает массивный скаляр в поле имя_поля. (x может иметь поля, например, при соответствии структурированному типу данных.)

Методы

Массивные скаляры имеют ровно те же методы, что и массивы. По умолчанию эти методы выполняют внутреннюю конвертацию скаляра в эквивалентный массив нулевой размерности и вызывают соответствующий метод массива. Кроме того, математические операции над массивными скалярами определяются таким образом, что устанавливаются и используются те же аппаратные флаги, что и при интерпретации результатов для ufunc, поэтому состояние ошибок, используемое для ufunc, также распространяется на математические операции над массивными скалярами.

Исключения из вышеупомянутых правил приведены ниже:

generic.__array__

sc.__array__(dtype) возвращает массив нулевой размерности из скаляра с указанным типом dtype

generic.__array_wrap__

sc.__array_wrap__(obj) возвращает скаляр из массива

generic.squeeze

Метод скаляра, идентичный соответствующему атрибуту массива.

generic.byteswap

Метод скаляра, идентичный соответствующему атрибуту массива.

generic.__reduce__

Помощник для pickle.

generic.__setstate__

generic.setflags

Метод скаляра, идентичный соответствующему атрибуту массива.

Определение новых типов

Существует два способа эффективного определения нового типа массивного скаляра (кроме построения структурированных типов dtypes из встроенных скалярных типов): Один способ — просто унаследовать от ndarray и переопределить интересующие методы. Это будет работать до определенной степени, но внутренние особенности определяются типом данных массива. Для полной настройки типа данных массива необходимо определить новый тип данных и зарегистрировать его в NumPy. Такие новые типы можно определить только на C, используя NumPy C-API.

© 2005–2021 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.20/reference/arrays.scalars.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API