Spec-Zone.ru › NumPy 2.0

numpy.ndarray.view

метод

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

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

Примечание

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

Параметры:
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 должна быть непрерывной. Эта ось будет изменена в результате.

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

Примеры

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

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

>>> 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', '<i2'), ('length', '<i2')])

Однако, виды, которые изменяют 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)

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

Spec-Zone.ru

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