三维NumPy数组切片操作的运行逻辑及输出维度解析
NumPy三维数组切片原理及运行结果
首先给出修正后可正常运行的代码:
import numpy as np arr = np.array([[[1,2,3], [4,5,6]], [[7,8,9],[10,11,12]]]) print(arr[0:2, : , 2])
数组结构说明
你定义的arr是三维数组,shape为(2, 2, 3),三个维度的含义分别是:
- 第0维:共2个二维子数组,索引0对应
[[1,2,3], [4,5,6]],索引1对应[[7,8,9], [10,11,12]] - 第1维:每个二维子数组包含2行元素
- 第2维:每行包含3个元素,索引0、1、2分别对应每行的第1、2、3个元素
切片规则说明
arr[0:2, : , 2]中三个位置的参数分别对应三个维度的筛选规则:
0:2:筛选第0维索引从0到1的全部元素(Python切片左闭右开,刚好覆盖所有2个二维子数组)::筛选第1维的所有行,无过滤2:固定取第2维索引为2的元素,也就是每行的第三个元素
NumPy切片的维度保留规则为:使用范围切片(包含:)的维度会保留,使用固定整数索引的维度会被压缩。本次切片中第0、1维都是范围切片,保留对应维度,第2维用固定索引筛选,维度被消除,因此最终输出是二维数组。
实际运行输出
[[ 3 6] [ 9 12]]
输出的数组shape为(2,2),刚好包含你提到的3、6、9、12四个元素,按维度排列为两行两列。
内容的提问来源于stack exchange,提问作者Sandeep
相关产品推荐
相关产品推荐

