numpy.ravel#
- numpy.ravel(a, order='C')[源代码]#
返回一个连续的扁平化数组.
返回一个 1-D 数组,其中包含输入的元素.仅在需要时才进行复制.
从 NumPy 1.10 开始,返回的数组将具有与输入数组相同的类型.(例如,将为掩码数组输入返回一个掩码数组)
- 参数:
- aarray_like
输入数组. a 中的元素按照 order 指定的顺序读取,并打包为 1-D 数组.
- order{‘C’,’F’, ‘A’, ‘K’}, 可选
a 的元素使用此索引顺序读取.“C”表示以行优先,C 风格的顺序索引元素,其中最后一个轴索引变化最快,返回到第一个轴索引变化最慢.“F”表示以列优先,Fortran 风格的顺序索引元素,其中第一个索引变化最快,而最后一个索引变化最慢.请注意,“C”和“F”选项不考虑底层数组的内存布局,仅指轴索引的顺序.“A”表示如果 a 在内存中是 Fortran 连续的,则以类似 Fortran 的索引顺序读取元素,否则以 C 风格顺序读取.“K”表示以它们在内存中出现的顺序读取元素,除非在步幅为负时反转数据.默认情况下,使用“C”索引顺序.
- 返回:
- yarray_like
y 是一个与 a 具有相同子类型的 contiguous 1-D 数组,形状为
(a.size,).请注意,为了向后兼容,矩阵会被特殊处理;如果 a 是一个矩阵,那么 y 是一个 1-D ndarray.
参见
ndarray.flat数组的 1-D 迭代器.
ndarray.flatten数组元素按行优先顺序排列的 1-D 数组副本.
ndarray.reshape改变数组的形状而不改变其数据.
注释
在行优先,C 风格的顺序中,在二维情况下,行索引变化最慢,列索引变化最快.这可以推广到多个维度,其中行优先顺序意味着沿第一个轴的索引变化最慢,而沿最后一个轴的索引变化最快.列优先,Fortran 风格的索引顺序则相反.
如果希望在尽可能多的情况下获得视图,
arr.reshape(-1)可能是更可取的.但是,ravel支持可选参数order中的K,而reshape不支持.示例
它等价于
reshape(-1, order=order).>>> import numpy as np >>> x = np.array([[1, 2, 3], [4, 5, 6]]) >>> np.ravel(x) array([1, 2, 3, 4, 5, 6])
>>> x.reshape(-1) array([1, 2, 3, 4, 5, 6])
>>> np.ravel(x, order='F') array([1, 4, 2, 5, 3, 6])
当
order为 ‘A’ 时,它会保留数组的 ‘C’ 或 ‘F’ 排序:>>> np.ravel(x.T) array([1, 4, 2, 5, 3, 6]) >>> np.ravel(x.T, order='A') array([1, 2, 3, 4, 5, 6])
当
order为 ‘K’ 时,它将保留既不是 ‘C’ 也不是 ‘F’ 的排序,但不会反转轴:>>> a = np.arange(3)[::-1]; a array([2, 1, 0]) >>> a.ravel(order='C') array([2, 1, 0]) >>> a.ravel(order='K') array([2, 1, 0])
>>> a = np.arange(12).reshape(2,3,2).swapaxes(1,2); a array([[[ 0, 2, 4], [ 1, 3, 5]], [[ 6, 8, 10], [ 7, 9, 11]]]) >>> a.ravel(order='C') array([ 0, 2, 4, 1, 3, 5, 6, 8, 10, 7, 9, 11]) >>> a.ravel(order='K') array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])