在 NumPy 中,[::-1][::-1] 和 [::-1, ::-1] 二维数组索引之间有什么区别?

Meg*_*arg 1 python arrays numpy

我想反转二维数组,但在使用[::-1][::-1][::-1, ::-1]索引时得到两个不同的结果。下面是一个示例。我不太明白它是如何不同地解释的。

values = [
    [5, 6, 5, 5, 8, 9, 9], 
    [9, 5, 1, 4, 5, 9, 7], 
    [3, 9, 6, 2, 1, 2, 3], 
    [1, 7, 6, 7, 1, 7, 5], 
    [2, 1, 3, 8, 7, 8, 8], 
    [2, 9, 3, 6, 4, 6, 4]
]
x = np.array(values)
reverse_2d_1 = x[::-1][::-1]
reverse_2d_2 = x[::-1, ::-1]
Run Code Online (Sandbox Code Playgroud)
[[5 6 5 5 8 9 9]
 [9 5 1 4 5 9 7]
 [3 9 6 2 1 2 3]
 [1 7 6 7 1 7 5]
 [2 1 3 8 7 8 8]
 [2 9 3 6 4 6 4]]
Run Code Online (Sandbox Code Playgroud)
[[4 6 4 6 3 9 2]
 [8 8 7 8 3 1 2]
 [5 7 1 7 6 7 1]
 [3 2 1 2 6 9 3]
 [7 9 5 4 1 5 9]
 [9 9 8 5 5 6 5]]
Run Code Online (Sandbox Code Playgroud)

小智 5

在第一个示例中,两个切片是单独解析的,因为每个切片都是一个单独的操作。因此,第一个[::-1]将垂直翻转数组,然后第二个[::-1]将再次垂直翻转数组,使其保持开始状态。

在第二个示例中,切片一起解析,每个切片在相应的轴上操作。所以第一个::-1将垂直翻转,第二个::-1将水平翻转。

如果你觉得比较容易理解,也可以调用np.flip(x, (0, 1))沿着给定的轴翻转。