上一主题

numpy.reshape

下一主题

numpy.moveaxis

numpy.ravel

numpy.ravel(a, order='C')[source]

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

返回包含输入元素的1-D数组。只有在需要时才进行复印。

从NumPy 1.10开始,返回的数组将具有与输入数组相同的类型。(例如,将为掩蔽的数组输入返回掩蔽的数组)

参数:

a:array_like

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

订单:{'C','F','A','K'},可选

使用此索引顺序读取a的元素。'C'意味着以row-major,C风格顺序索引元素,最后一个轴索引变化最快,回到第一个轴索引变化最慢。'F'意味着以列大,Fortran风格顺序索引元素,第一个索引变化最快,最后一个索引变化最慢。请注意,'C'和'F'选项不考虑底层数组的内存布局,只涉及轴索引的顺序。'A'意味着在内存中a是Fortran 连续时,以类似Fortran的顺序读取元素,否则类似C的顺序。'K'意味着按照它们在存储器中出现的顺序读取元素,除非当步幅为负时反转数据。默认情况下,将使用“C”索引顺序。

返回:

y:array_like

如果a是矩阵,则y是1-D ndarray,否则y是与a相同子类型的数组。返回的数组的形状为(a.size,)矩阵是特殊情况下的向后兼容性。

也可以看看

ndarray.flat
1-D迭代器。
ndarray.flatten
数组的元素的1-D数组副本。
ndarray.reshape
更改数组的形状,而不更改其数据。

笔记

在行主,C样式顺序中,在二维中,行索引变化最慢,列索引最快。这可以被推广到多个维度,其中行主要顺序意味着沿着第一轴的索引变化最慢,并且索引沿着最后最快。相反,列主键,Fortran风格索引排序。

当在尽可能多的情况下需要视图时,arr.reshape(-1)可能是优选的。

例子

它等效于reshape(-1, order = order)

>>> x = np.array([[1, 2, 3], [4, 5, 6]])
>>> print(np.ravel(x))
[1 2 3 4 5 6]
>>> print(x.reshape(-1))
[1 2 3 4 5 6]
>>> print(np.ravel(x, order='F'))
[1 4 2 5 3 6]

order为'A'时,它将保留数组的'C'或'F'顺序:

>>> print(np.ravel(x.T))
[1 4 2 5 3 6]
>>> print(np.ravel(x.T, order='A'))
[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])