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时,实际是两步连续的一维切片操作:
array_2D[:]:取出数组的所有行,返回的仍是一个二维数组;[-1]:对这个二维数组取最后一行,随后将该行所有元素赋值为10,所以最终修改的是最后一行而非最后一列。
而array_2D[:,-1] = 10是numpy专属的多维切片语法:
- 逗号左侧的
:表示选中所有行; - 逗号右侧的
-1表示选中每一行的最后一列;
这行代码直接定位到所有行的最后一列元素,赋值后自然会修改最后一列的所有值。
总结
numpy支持行切片,但[:][-1]不是多维数组的正确行列定位方式,它是对数组做了两次一维切片。要在多维数组中同时指定行和列的范围,必须使用逗号分隔的多维切片语法,这是numpy和普通Python列表切片的核心区别之一。
内容的提问来源于stack exchange,提问作者John Kuriakose
相关产品推荐
相关产品推荐

