numpy.ravel#

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

返回一个连续的展平数组。

返回一个包含输入元素的一维数组。仅在需要时才进行复制。

自 NumPy 1.10 起,返回的数组将具有与输入数组相同的类型。(例如,对于掩码数组输入,将返回一个掩码数组)

参数:
a类数组对象

输入数组。 a 中的元素将按照 order 指定的顺序读取,并打包成一个一维数组。

order{‘C’, ‘F’, ‘A’, ‘K’}, optional

a 的元素使用此索引顺序读取。“C”表示按行优先、C 风格顺序索引元素,其中最后一个轴索引变化最快,第一个轴索引变化最慢。“F”表示按列优先、Fortran 风格顺序索引元素,其中第一个索引变化最快,最后一个索引变化最慢。请注意,“C”和“F”选项不考虑底层数组的内存布局,仅指轴索引的顺序。“A”表示如果 a 在内存中是 Fortran 连续的,则按 Fortran 风格索引顺序读取元素,否则按 C 风格顺序读取。“K”表示按元素在内存中出现的顺序读取,但当步长为负时会反转数据。默认情况下,使用“C”索引顺序。

返回:
yarray_like

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])