NumPy参考 >数组对象 >标准数组子类 >numpy.matrix > numpy.matrix.view
方法
matrix.
view
(dtype = None,type = None )¶具有相同数据的数组的新视图。
返回视图的数据类型描述符,例如float32或int16。默认,无,结果在具有数据类型为相同的视图一个。此参数也可以指定为ndarray子类,然后指定返回对象的类型(这等效于设置type
参数)。
返回视图的类型,例如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实例,该实例查看相同的数组(相同的形状,dtype等)。这不会导致对内存的重新解释。
为a.view(some_dtype)
,如果some_dtype
具有不同数量的每个条目比以前的D型细胞字节(例如,转换的规则阵列的结构化阵列),那么该视图的行为不能被刚从的表面形貌预测a
(通过示出print(a)
)。它还取决于确切的a
存储方式。因此,如果a
将C顺序相对于Fortran顺序,相对于定义为切片或转置等,则该视图可能会给出不同的结果。
例子
>>> x = np.array([(1, 2)], dtype=[('a', np.int8), ('b', np.int8)])
使用不同的type和dtype查看数组数据:
>>> 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顺序等定义的数组上,应避免更改dtype大小(每个条目的字节数)的视图:
>>> 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')])