numpy.ndarray.view#

метод

ndarray.представление([dtype][, тип])#

Новое представление массива с теми же данными.

Примечание

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

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

Дескриптор типа данных возвращаемого представления, например, float32 или int16. Если опустить, представление будет иметь тот же тип данных, что и a. Этот аргумент также может быть указан как подкласс ndarray, который затем определяет тип возвращаемого объекта (это эквивалентно установке 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 который смотрит на тот же массив (та же форма, dtype и т.д.). Это не вызывает переинтерпретации памяти.

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

Изменено в версии 1.23.0: Только последняя ось должна быть непрерывной. Ранее весь массив должен был быть C-непрерывным.

Примеры

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

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

>>> nonneg = np.dtype([("a", np.uint8), ("b", np.uint8)])
>>> y = x.view(dtype=nonneg, type=np.recarray)
>>> x["a"]
array([-1], dtype=int8)
>>> y.a
array([255], dtype=uint8)

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

>>> 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]
np.record((9, 10), dtype=[('a', 'i1'), ('b', 'i1')])

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

>>> x = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.int16)
>>> y = x[:, ::2]
>>> y
array([[1, 3],
       [4, 6]], 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 last axis must be contiguous
>>> z = y.copy()
>>> z.view(dtype=[('width', np.int16), ('length', np.int16)])
array([[(1, 3)],
       [(4, 6)]], dtype=[('width', '

Однако представления, изменяющие dtype, полностью допустимы для массивов с непрерывной последней осью, даже если остальные оси не являются C-непрерывными:

>>> x = np.arange(2 * 3 * 4, dtype=np.int8).reshape(2, 3, 4)
>>> x.transpose(1, 0, 2).view(np.int16)
array([[[ 256,  770],
        [3340, 3854]],

       [[1284, 1798],
        [4368, 4882]],

       [[2312, 2826],
        [5396, 5910]]], dtype=int16)