在这里插入图片描述

b = 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, 26, 27, 28], [29, 30, 31, 32], [33, 34, 35, 36]],
              ])
print(b.shape)
print(b) # 他输出的是三个zoy面,如上图所示
print(b[0, 0, 0])
print(b[0, 0, 1])
print(b[0, 0, 2])
print(b[0, 0, 3])
print(b[0, 1, 0])
print(b[0, 1, 1])
print(b[1, 0, 0])
print(b[1, 2, 3])
print()

(3, 3, 4)
[[[ 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 26 27 28]
[29 30 31 32]
[33 34 35 36]]]
1
2
3
4
5
6
13
24

上面的b[x, y, z] 中的x,y,z改成范围 ,就是切片 比如b[0:2, 0:2, 0:2] 表示范围是xyz的范围都是 [0, 2)
如果冒号两边没有指明范围就默认表示全部,如:b[0, 0, :]

print(b[0, 0, :])
print(b[0, :, 0])
print(b[:, 0, 0])
print()
print(b[0, 1, :])
print(b[1, :, 2])
print(b[:, 1, 0])
print()

[1 2 3 4]
[1 5 9]
[ 1 13 25]

[5 6 7 8]
[15 19 23]
[ 5 17 29]

类似于b[0, :, :] 两个冒号之间的逗号也可以省略,如:b[0, ::]
-1表示倒数第一个即最后一个

print(b[0, ::], b[0, ::].shape)
print(b[1, ::], b[1, ::].shape)
print(b[-1, ::], b[-1, ::].shape)
print(b[0:2, ::], b[0:2, ::].shape)

###############b[0, ::]######################
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]] (3, 4)

###############b[1, ::]######################
[[13 14 15 16]
[17 18 19 20]
[21 22 23 24]] (3, 4)

############### b[0:2, ::] ######################
[[25 26 27 28]
[29 30 31 32]
[33 34 35 36]] (3, 4)

[[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]

[[13 14 15 16]
[17 18 19 20]
[21 22 23 24]]] (2, 3, 4)
#############################################

print(b[:, 0:], b[:, 0:].shape)
print(b[:, 1:], b[:, 1:].shape)
print(b[:, -1:], b[:, -1:].shape)
print(b[:, 0:2:], b[:, 0:2:].shape)

###############b[:, 0:] ###################
b[:, 0:] 类似于b[:, :, :] , 第3维直接省略了就表示第3维全部都选,0: 只指明了起始为第0个位置没有指明切片结束的地方,也表示第2维全选。
[[[ 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 26 27 28]
[29 30 31 32]
[33 34 35 36]]] (3, 3, 4)
############## b[:, 1:]########################
b[:, 1:]表示 第1维和第3维全选,第2维从下标为1的开始切片到最后,看上图可推知结果。
[[[ 5 6 7 8]
[ 9 10 11 12]]

[[17 18 19 20]
[21 22 23 24]]

[[29 30 31 32]
[33 34 35 36]]] (3, 2, 4)
###############b[:, -1:]######################
b[:, -1:]表示第1维和第3维全选,第2维从最后一个到最后,就是输出最后一个
[[[ 9 10 11 12]]

[[21 22 23 24]]

[[33 34 35 36]]] (3, 1, 4)
############### b[:, 0:2:]######################
b[:, 0:2:] 表示第1维和第3维全选,第2维的切片范围是[0,2),即选取第0个和第1个。
写b[:, 0:2, :] 更好理解一些,省略一个逗号不太好理解,不过确实可以省略。
[[[ 1 2 3 4]
[ 5 6 7 8]]

[[13 14 15 16]
[17 18 19 20]]

[[25 26 27 28]
[29 30 31 32]]] (3, 2, 4)
#############################################

总结:只要不去省略逗号或者省略切片范围,切片还是很好理解的。而对于三维数组可能需要看看那个图。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐