python三维数组切片

在这里插入图片描述

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)
#############################################

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

  • 18
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值