Spec-Zone.ru › NumPy 1.21

numpy.recarray.view

метод

recarray.view([dtype][, type])

Новый вид массива с теми же данными.

Примечание

Передача None для dtype отличается от пропуска параметра, поскольку первый вызывает dtype(None), который является псевдонимом для dtype('float_').

Параметры
dtypeтип данных или подкласс ndarray, необязательно

Описание типа данных возвращаемого вида, например, float32 или int16. Пропуск приводит к тому, что вид будет иметь тот же тип данных, что и a. Этот аргумент также может быть указан как подкласс ndarray, который затем определяет тип возвращаемого объекта (это эквивалентно установке параметра type).

typeтип Python, необязательно

Тип возвращаемого вида, например, ndarray или matrix. Опять же, пропуск параметра приводит к сохранению типа.

Примечания

a.view() используется двумя разными способами:

a.view(some_dtype) или a.view(dtype=some_dtype) создаёт вид памяти массива с другим типом данных. Это может привести к переинтерпретации байтов памяти.

a.view(ndarray_subclass) или a.view(type=ndarray_subclass) просто возвращает экземпляр ndarray_subclass, который смотрит на тот же массив (такая же форма, тип данных и т. д.). Это не приводит к переинтерпретации памяти.

Для a.view(some_dtype), если some_dtype имеет другое количество байтов на запись, чем предыдущий тип данных (например, преобразование обычного массива в структурированный массив), то поведение вида нельзя предсказать только по внешнему виду a (показанное print(a)). Это также зависит от того, как a хранится в памяти. Поэтому, если a является C-упорядоченным или Fortran-упорядоченным, определён как срез или транспонирование и т.д., вид может дать разные результаты.

Примеры

>>> x = np.array([(1, 2)], dtype=[('a', np.int8), ('b', np.int8)])

Просмотр данных массива с использованием другого типа и типа данных:

>>> y = x.view(dtype=np.int16, type=np.matrix)
>>> y
matrix([[513]], dtype=int16)
>>> print(type(y))
<class 'numpy.matrix'>

Создание вида на структурированном массиве, чтобы его можно было использовать в расчётах

>>> x = np.array([(1, 2),(3,4)], dtype=[('a', np.int8), ('b', np.int8)])
>>> xv = x.view(dtype=np.int8).reshape(-1,2)
>>> xv
array([[1, 2],
       [3, 4]], dtype=int8)
>>> xv.mean(0)
array([2.,  3.])

Изменение вида изменяет исходный массив

>>> xv[0,1] = 20
>>> x
array([(1, 20), (3,  4)], dtype=[('a', 'i1'), ('b', 'i1')])

Использование вида для преобразования массива в recarray:

>>> z = x.view(np.recarray)
>>> z.a
array([1, 3], dtype=int8)

Виды разделяют данные:

>>> x[0] = (9, 10)
>>> z[0]
(9, 10)

Виды, изменяющие размер типа данных (байтов на запись), обычно следует избегать в массивах, определённых срезами, транспонированием, Fortran-упорядочением и т. д.:

>>> x = np.array([[1,2,3],[4,5,6]], dtype=np.int16)
>>> y = x[:, 0:2]
>>> y
array([[1, 2],
       [4, 5]], dtype=int16)
>>> y.view(dtype=[('width', np.int16), ('length', np.int16)])
Traceback (most recent call last):
    ...
ValueError: To change to a dtype of a different size, the array must be C-contiguous
>>> z = y.copy()
>>> z.view(dtype=[('width', np.int16), ('length', np.int16)])
array([[(1, 2)],
       [(4, 5)]], dtype=[('width', '<i2'), ('length', '<i2')])

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

Spec-Zone.ru

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