a.view(dtype
, type
)
New view of array with the same data.
.. note:: Passing None for ``dtype`` is different from omitting the parameter, since the former invokes ``dtype(None)`` which is an alias for ``dtype('float_')``.
Parameters ---------- dtype : data-type or ndarray sub-class, optional Data-type descriptor of the returned view, e.g., float32 or int16. Omitting it results in the view having the same data-type as `a`. This argument can also be specified as an ndarray sub-class, which then specifies the type of the returned object (this is equivalent to setting the ``type`` parameter). type : Python type, optional Type of the returned view, e.g., ndarray or matrix. Again, omission of the parameter results in type preservation.
Notes ----- ``a.view()`` is used two different ways:
``a.view(some_dtype)`` or ``a.view(dtype=some_dtype)`` constructs a view of the array's memory with a different data-type. This can cause a reinterpretation of the bytes of memory.
``a.view(ndarray_subclass)`` or ``a.view(type=ndarray_subclass)`` just returns an instance of `ndarray_subclass` that looks at the same array (same shape, dtype, etc.) This does not cause a reinterpretation of the memory.
For ``a.view(some_dtype)``, if ``some_dtype`` has a different number of bytes per entry than the previous dtype (for example, converting a regular array to a structured array), then the behavior of the view cannot be predicted just from the superficial appearance of ``a`` (shown by ``print(a)``). It also depends on exactly how ``a`` is stored in memory. Therefore if ``a`` is C-ordered versus fortran-ordered, versus defined as a slice or transpose, etc., the view may give different results.
Examples -------- >>> x = np.array((1, 2)
, dtype=('a', np.int8), ('b', np.int8)
)
Viewing array data using a different type and dtype:
>>> y = x.view(dtype=np.int16, type=np.matrix) >>> y matrix([513]
, dtype=int16) >>> print(type(y)) <class 'numpy.matrix'>
Creating a view on a structured array so it can be used in calculations
>>> 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.
)
Making changes to the view changes the underlying array
>>> xv0,1
= 20 >>> x array((1, 20), (3, 4)
, dtype=('a', 'i1'), ('b', 'i1')
)
Using a view to convert an array to a recarray:
>>> z = x.view(np.recarray) >>> z.a array(1, 3
, dtype=int8)
Views share data:
>>> x0
= (9, 10) >>> z0
(9, 10)
Views that change the dtype size (bytes per entry) should normally be avoided on arrays defined by slices, transposes, fortran-ordering, etc.:
>>> 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')
)