numpy.ravel#
- numpy.ravel(a, order='C')[source]#
返回一个连续的扁平数组。
返回一个包含输入元素的一维数组。仅在需要时才会创建副本。
从 NumPy 1.10 开始,返回的数组将与输入数组具有相同的类型。(例如,如果输入是掩码数组,则返回的也将是掩码数组)
- 参数:
- a类数组
输入数组。按照 order 指定的顺序读取 a 中的元素,并将其打包为一维数组。
- order{‘C’,’F’, ‘A’, ‘K’}, 可选
使用此索引顺序读取 a 的元素。‘C’ 表示按行主序(C 风格)索引元素,其中最后一个轴的索引变化最快,第一个轴的索引变化最慢。‘F’ 表示按列主序(Fortran 风格)索引元素,其中第一个索引变化最快,最后一个索引变化最慢。请注意,‘C’ 和 ‘F’ 选项不考虑底层数组的内存布局,仅指轴索引的顺序。‘A’ 表示如果 a 在内存中是 Fortran 连续的,则按类 Fortran 索引顺序读取元素;否则按类 C 顺序读取。‘K’ 表示按元素在内存中出现的顺序读取,但当步长为负时会反转数据。默认情况下,使用 ‘C’ 索引顺序。
- 返回值:
- y类数组
y 是一个与 a 具有相同子类型、形状为
(a.size,)
的连续一维数组。请注意,为向后兼容性,矩阵是特殊处理的:如果 a 是一个矩阵,则 y 是一个一维 ndarray。
另请参阅
ndarray.flat
数组上的一维迭代器。
ndarray.flatten
按行主序复制数组元素得到的一维数组。
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])