Spec-Zone.ru › NumPy 1.21

Скаляры

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.

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

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

Подсказка

По умолчанию в NumPy используется тип данных float_.

class numpy.generic[source]

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

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

class numpy.number[source]

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

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

class numpy.integer[source]

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

Примечание

Целочисленные типы NumPy отражают поведение целочисленных типов C и поэтому могут быть подвержены ошибкам переполнения.

Означенные целочисленные типы

class numpy.signedinteger[source]

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

class numpy.byte[source]

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

Код символа

'b'

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

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

END_OF_DOCUMENT_MARKER
класс numpy.short[source]

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

Код символа

'h'

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

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

класс numpy.intc[source]

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

Код символа

'i'

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

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

класс numpy.int_[source]

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

Код символа

'l'

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

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

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

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

класс numpy.longlong[source]

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

Код символа

'q'

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

класс numpy.unsignedinteger[source]

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

класс numpy.ubyte[source]

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

Код символа

'B'

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

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

класс numpy.ushort[source]

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

Код символа

'H'

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

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

класс numpy.uintc[source]

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

Код символа

'I'

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

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

класс numpy.uint[source]

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

Код символа

'L'

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

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

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

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

класс numpy.ulonglong[source]

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

Код символа

'Q'

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

класс numpy.inexact[source]

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

Примечание

Скаляры с плавающей точкой выводятся с наименьшим количеством десятичных знаков, необходимых для различения их значения от других значений того же типа данных, путём разумного округления. См. параметр unique format_float_positional и format_float_scientific.

Это означает, что переменные с одинаковыми двоичными значениями, но типами данных различной точности, могут отображаться по-разному:

>>> f16 = np.float16("0.1")
>>> f32 = np.float32(f16)
>>> f64 = np.float64(f32)
>>> f16 == f32 == f64
True
>>> f16, f32, f64
(0.1, 0.099975586, 0.0999755859375)

Обратите внимание, что ни одно из этих чисел с плавающей точкой не содержит точное значение \(\frac{1}{10}\); f16 выводится как 0.1, так как это значение наиболее близко к данному значению, в то время как другие типы не отображают его, так как имеют большую точность и, следовательно, более близкие значения.

И наоборот, числа с плавающей точкой различной точности, которые приближают одно и то же десятичное значение, могут быть неравными, несмотря на то, что они выводятся одинаково:

>>> f16 = np.float16("0.1")
>>> f32 = np.float32("0.1")
>>> f64 = np.float64("0.1")
>>> f16 == f32 == f64
False
>>> f16, f32, f64
(0.1, 0.1, 0.1)

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

класс numpy.floating[source]

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

класс numpy.half[source]

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

Код символа

'e'

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

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

класс numpy.single[source]

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

Код символа

'f'

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

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

класс numpy.double(x=0, /)[source]

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

Код символа

'd'

Псевдоним

numpy.float_

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

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

класс numpy.longdouble[source]

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

Код символа

'g'

Псевдоним

numpy.longfloat

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

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

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

класс numpy.complexfloating[source]

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

класс numpy.csingle[source]

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

Код символа

'F'

Псевдоним

numpy.singlecomplex

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

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

класс numpy.cdouble(real=0, imag=0)[source]

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

Код символа

'D'

Псевдоним

numpy.cfloat

Псевдоним

numpy.complex_

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

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

класс numpy.clongdouble[source]

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

Код символа

'G'

Псевдоним

numpy.clongfloat

Псевдоним

numpy.longcomplex

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

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

Другие типы

класс numpy.bool_[source]

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

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

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

Код символа

'?'

Псевдоним

numpy.bool8

класс numpy.datetime64[source]

Если создано из 64-битного целого числа, оно представляет собой смещение от 1970-01-01T00:00:00. Если создано из строки, строка может быть в формате даты или времени ISO 8601.

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

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

Код символа

'M'

класс numpy.timedelta64[source]

Тип timedelta, хранящийся как 64-битное целое число.

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

Код символа

'm'

класс numpy.object_[source]

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

Код символа

'O'

Примечание

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

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

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

класс numpy.flexible[source]

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

класс numpy.bytes_[source]

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

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

Код символа

'S'

Псевдоним

numpy.string_

класс numpy.str_[source]

Строка Unicode.

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

В отличие от встроенного 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_

класс 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) возвращает массив 0-мерности из скаляра со специфицированным типом данных

generic.__array_wrap__

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

generic.squeeze

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

generic.byteswap

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

generic.__reduce__

Помощник для сериализации.

generic.__setstate__

generic.setflags

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

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

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

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

Spec-Zone.ru

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