HOWTO · NumPy

NumPy 反转数组

在 Python 中,可以使用三种主要方法来反转 NumPy 数组:基本切片方法,numpy.flipud()函数和 numpy.flip()函数。

本页内容

在 Python 中反转 NumPy 数组,可以使用基本切片 [::-1]、numpy.flipud() 或 numpy.flip()。切片适合简洁地反转一维数组,并会返回视图。numpy.flipud() 沿轴 0 反转行,而 numpy.flip() 可以反转指定轴或所有轴。下面的示例展示了这些方法的不同结果。

使用基本切片方法在 Python 中反转 NumPy 数组

对于一维数组,array[::-1] 会以 -1 为步长,从末尾向前选取元素。运行以下示例:

本节中的代码以及显示的标签或输出仍为英文。

import numpy as np

array = np.array([1, 2, 3, 4, 5])
reverse = array[::-1]
print(reverse)
[5 4 3 2 1]

这个切片是视图,与 array 引用同一份数据;它不会创建独立副本。因此,通过 reverse 赋值也会更改 array 中对应的元素。如果需要让原始值保持不变,可以使用 array[::-1].copy() 创建副本。当你想用简洁的方式反转一维数组,且可以接受视图行为时,这种方法很实用。对于多维数组,同一表达式只会反转第一个轴;如果要指定更改哪个维度,请使用能够指定轴的函数。

在 Python 中使用 numpy.flipud() 函数反转 NumPy 数组

numpy.flipud() 沿轴 0 反转数组。对于一维数组,轴 0 是它唯一的轴,因此元素会呈现反向顺序。对于二维数组,轴 0 对应行的方向:行的顺序会改变,但每行内部的元素顺序保持不变。此函数的用法见 NumPy numpy.flipud() 文档。

本节中的代码以及显示的标签或输出仍为英文。

import numpy as np

array = np.array([[1, 2], [3, 4]])
print(np.flipud(array))
[[3 4]
 [1 2]]

如果要执行的操作是沿轴 0 反转,尤其是对矩阵反转行顺序,可以选择 numpy.flipud()。对于一维数组,它是切片的一种易读替代方案;如果要反转其他轴,请使用 numpy.flip() 并明确指定该轴。

在 Python 中使用 numpy.flip() 函数反转 NumPy 数组

numpy.flip() 会沿传入的轴反转元素。对于二维数组,axis=1 会反转每一行中的列。如果省略 axis,默认值为 None,表示反转所有轴。这会同时改变行的顺序和每行内部的元素顺序;它不会将数组展平为一个序列。请参阅 NumPy numpy.flip() 文档。

本节中的代码以及显示的标签或输出仍为英文。

import numpy as np

array = np.array([[1, 2], [3, 4]])
print(np.flip(array, axis=1))
print(np.flip(array))
[[2 1]
 [4 3]]
[[4 3]
 [2 1]]

使用 numpy.flip(array, axis=0) 反转行,使用 axis=1 反转二维数组中的列,或省略 axis 以反转所有维度。对于一维数组,省略 axis 会反转它唯一的轴。实际选择时,一维数组的简短写法可以用切片;明确需要沿轴 0 反转时可以用 numpy.flipud();需要指定轴或反转所有轴时则可以用 numpy.flip()。这些操作会改变元素沿各维度的顺序,但不会对值排序,也不会改变数组的形状。