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

Numpy矩阵索引等价性疑问:两种索引结果维度为何不同?

为什么NumPy两种索引返回的数组形状不同?

这其实是NumPy中两种索引机制的差异导致的,咱们把这两个操作拆开来看:

1. mat[:3,1:2] 的情况

这里的列索引用的是切片操作(1:2),在NumPy里,切片会保留原数组的维度信息。先看一下原数组:

import numpy as np
mat = np.array([[ 1, 2, 3, 4, 5],
                [ 6, 7, 8, 9, 10],
                [11, 12, 13, 14, 15],
                [16, 17, 18, 19, 20],
                [21, 22, 23, 24, 25]])
  • 行切片[:3]取前3行(索引0、1、2)
  • 列切片1:2取索引1到2之间的列(不包含2,也就是只有索引1这一列)

因为切片操作不会降低数组维度,所以最终返回的是一个3行1列的二维数组,形状为(3, 1),结果就是:

array([[ 2],
       [ 7],
       [12]])

2. mat[:3,1] 的情况

这里的列索引用的是整数索引(单个整数1),当用单个整数索引获取某一行/列时,NumPy会自动进行降维操作——把原二维数组的对应维度“压缩”掉。

  • 行切片[:3]依然取前3行
  • 列整数索引1直接取每行的第2个元素(索引从0开始)

这三个元素会被组合成一个一维数组,形状为(3,),所以结果就是:

array([ 2, 7, 12])

额外小技巧

如果想用整数索引但又不想降维,你可以把整数放到列表里,比如mat[:3, [1]],这样返回的就是和切片操作一样的二维数组啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:03:05