You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NumPy二维数组索引中[::-1][::-1]与[::-1, ::-1]的区别

NumPy二维数组两种反转索引写法的逻辑差异

复现代码

import numpy as np
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]

执行逻辑拆解

两种写法结果完全不同,核心区别是索引的作用维度和执行顺序完全不一样:

  • x[::-1][::-1]是两次链式的单维度索引
    每次单独的[::-1]索引默认只操作数组的第一个维度(二维数组的行方向):

    1. 第一次x[::-1]会沿行方向反转整个数组,原数组最后一行移到第一行、倒数第二行移到第二行,生成一个行顺序完全颠倒的中间数组
    2. 第二次[::-1]是对刚才生成的中间数组再次沿行方向反转,相当于把颠倒的行顺序又还原回初始状态
      两次行反转效果完全抵消,最终输出和原数组完全一致。
  • x[::-1, ::-1]是NumPy支持的多维度同时索引
    逗号分隔的切片参数会按顺序分别对应数组从低到高的维度,一次索引操作同时作用在多个维度上:

    1. 第一个::-1作用在第0维(行方向),反转所有行的顺序
    2. 第二个::-1作用在第1维(列方向),反转每一行内部的元素顺序
      最终效果是数组的行、列都被完全反转,等价于将二维数组旋转180度。

运行结果对照

  • reverse_2d_1输出(两次链式行反转):
[[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]]

和原数组内容完全一致。

  • reverse_2d_2输出(双维度同时反转):
[[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]]

为行列均反转后的结果。

常用反转操作参考:仅反转行用x[::-1],仅反转列用x[:, ::-1],全维度反转用x[::-1, ::-1]。

内容的提问来源于stack exchange,提问作者MegaKarg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 16:18:24