方法
recarray.
view
具有相同数据的数组的新视图。
注解
不通过 dtype 与省略参数不同,因为前者调用 dtype(None) 这是的别名 dtype('float_') .
dtype
dtype(None)
dtype('float_')
返回视图的数据类型描述符,例如float32或int16。省略它会导致视图的数据类型与 a . 此参数也可以指定为ndarray子类,然后指定返回对象的类型(这相当于设置 type 参数)。
type
返回视图的类型,例如ndarray或matrix。同样,省略参数会导致类型保留。
笔记
a.view() 使用两种不同的方式:
a.view()
a.view(some_dtype) 或 a.view(dtype=some_dtype) 使用不同的数据类型构造数组内存的视图。这可能导致对内存字节的重新解释。
a.view(some_dtype)
a.view(dtype=some_dtype)
a.view(ndarray_subclass) 或 a.view(type=ndarray_subclass) 只返回 ndarray_subclass 它查看相同的数组(相同的形状、数据类型等),这不会导致对内存的重新解释。
a.view(ndarray_subclass)
a.view(type=ndarray_subclass)
为了 a.view(some_dtype) 如果 some_dtype 每个条目的字节数与前一个数据类型的字节数不同(例如,将常规数组转换为结构化数组),因此无法仅从 a (如图所示) print(a) )这也取决于 a 存储在内存中。因此如果 a 是C顺序还是FORTRAN顺序,而不是定义为切片或转置等,视图可能会给出不同的结果。
some_dtype
a
print(a)
实例
>>> 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] (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): ... 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')])