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