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

NumPy二维数组切片疑问:双括号为何无法修改最后一列?

为什么numpy二维数组切片用[:][-1]和[:,-1]结果不同?

先看定义的二维数组:

import numpy as np
array_2D = np.array([[20,30,40,50,60], [43,54,65,76,87], [11,22,33,44,55]])

输出:

array([[20, 30, 40, 50, 60],
       [43, 54, 65, 76, 87],
       [11, 22, 33, 44, 55]])

问题原因拆解

当你执行array_2D[:][-1] = 10时,实际是两步连续的一维切片操作:

  1. array_2D[:]:取出数组的所有行,返回的仍是一个二维数组;
  2. [-1]:对这个二维数组取最后一行,随后将该行所有元素赋值为10,所以最终修改的是最后一行而非最后一列。

而array_2D[:,-1] = 10是numpy专属的多维切片语法:

  • 逗号左侧的:表示选中所有行;
  • 逗号右侧的-1表示选中每一行的最后一列;
    这行代码直接定位到所有行的最后一列元素,赋值后自然会修改最后一列的所有值。

总结

numpy支持行切片,但[:][-1]不是多维数组的正确行列定位方式,它是对数组做了两次一维切片。要在多维数组中同时指定行和列的范围,必须使用逗号分隔的多维切片语法,这是numpy和普通Python列表切片的核心区别之一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:20:35