numpy.ndarray.view
-
ndarray.view(dtype=None, type=None) -
Новая ссылка на массив с теми же данными.
Параметры: dtype : тип данных или подкласс ndarray, необязательно
Описатель типа данных возвращаемой ссылки, например, float32 или int16. По умолчанию, None, результатом является ссылка с тем же типом данных, что и
a. Этот параметр также может быть указан как подкласс ndarray, который затем определяет тип возвращаемого объекта (это эквивалентно установке параметраtype).type : тип Python, необязательно
Тип возвращаемой ссылки, например, ndarray или matrix. Опять же, по умолчанию None сохраняет тип.
Примечания
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.matrixlib.defmatrix.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 >>> print(x) [(1, 20) (3, 4)]
Использование ссылки для преобразования массива в recarray:
>>> z = x.view(np.recarray) >>> z.a array([1], 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): File "<stdin>", line 1, in <module> ValueError: new type not compatible with array. >>> z = y.copy() >>> z.view(dtype=[('width', np.int16), ('length', np.int16)]) array([[(1, 2)], [(4, 5)]], dtype=[('width', '<i2'), ('length', '<i2')])
© 2005–2019 NumPy Developers
Licensed under the 3-clause BSD License.
https://docs.scipy.org/doc/numpy-1.14.5/reference/generated/numpy.ndarray.view.html