numpy.ravel#

numpy.ravel(a, order='C')[源代码]#

返回一个连续的扁平化数组.

返回一个一维数组,其中包含输入的元素.只有在需要时才进行复制.

从 NumPy 1.10 开始,返回的数组将与输入数组具有相同的类型.(例如,对于掩码数组输入,将返回掩码数组)

参数:
aarray_like

输入数组. a 中的元素按照 order 指定的顺序读取,并打包为 1-D 数组.

order{‘C’,’F’, ‘A’, ‘K’}, 可选

a 的元素使用此索引顺序读取. ‘C’ 表示以行优先,C 风格的顺序索引元素,最后一个轴索引变化最快,第一个轴索引变化最慢. ‘F’ 表示以列优先,Fortran 风格的顺序索引元素,第一个索引变化最快,最后一个索引变化最慢. 请注意,’C’ 和 ‘F’ 选项不考虑底层数组的内存布局,仅参考轴索引的顺序.如果 a 在内存中是 Fortran 连续的,则 ‘A’ 表示以类似 Fortran 的索引顺序读取元素,否则以类似 C 的顺序读取元素. ‘K’ 表示以它们在内存中出现的顺序读取元素,但反转步幅为负时的数据. 默认情况下,使用 ‘C’ 索引顺序.

返回:
yarray_like

y 是一个与 a 具有相同子类型的连续 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])