numpy三维切片
1、numpy定义三维array
首先定义一个三维array
import numpy as np
array = np.array([
[[14, 32, 56, 32, 48],
[92, 53, 55, 63, 74],
[46, 76, 45, 98, 12],
[34, 65, 32, 12, 50]],
[[58, 52, 32, 20, 32],
[30, 30, 20, 85, 61],
[20, 14, 34, 32, 15],
[78, 35, 22, 30, 20]],
[[10, 20, 15, 32, 85],
[58, 20, 30, 58, 30],
[56, 85, 32, 20, 12],
[75, 55, 65, 85, 32]]
])
array的形状为(3,4,5)
array根据轴的方向分为axis = 0,axis = 1,axis = 2
将array进行可视化:
上图可以理解为三块(4x5)的数组快按axis = 0方向进行堆叠(stack),每一个小方块代表一个数值,其位置与array中元素位置相对应
2、对三维array沿axis = 0 方向切片
array[1, :, :]
array[1, :, :]
Out[4]:
array([[58, 52, 32, 20, 32],
[30, 30, 20, 85, 61],
[20, 14, 34, 32, 15],
[78, 35, 22, 30, 20]])
切片效果如图所示:
切片结果为上图红色部分
3、对三维array沿axis = 1 方向切片
array[:, 1, :]
array[:,1,:]
Out[5]:
array([[92, 53, 55, 63, 74],
[30, 30, 20, 85, 61],
[58, 20, 30, 58, 30]])
切片效果如图所示:
切片结果为上图红色部分
4、对三维array沿axis = 2 方向切片
array[:,:,1]
Out[6]:
array([[32, 53, 76, 65],
[52, 30, 14, 35],
[20, 20, 85, 55]])
切片效果如图所示:
切片结果为上图红色部分
5、不同方向求array最大值,np.max(array, axis = ?)
对数据在三维空间中是如何堆叠起来的有了深层次的理解之后,再来感受一下如何按照不同的方向去进行函数操作,以np.max()为例
np.max(array_, 0),axis=0, 输出的形状就为第二维x第三维,即(4x5),想当与把第一维(3)合并成(1)维,最后的形状可以看成(1x4x5)
import numpy as np
array_ = np.array([
[[14, 32, 56, 32, 48],
[92, 53, 55, 63, 74],
[46, 76, 45, 98, 12],
[34, 65, 32, 12, 50]],
[[58, 52, 32, 20, 32],
[30, 30, 20, 85, 61],
[20, 14, 34, 32, 15],
[78, 35, 22, 30, 20]],
[[10, 20, 15, 32, 85],
[58, 20, 30, 58, 30],
[56, 85, 32, 20, 12],
[75, 55, 65, 85, 32]]
])
print('axis = 0 \n',np.max(array_, 0))
axis = 0
[[58 52 56 32 85]
[92 53 55 85 74]
[56 85 45 98 15]
[78 65 65 85 50]]
np.max(array_, 1),axis=1, 输出的形状就为第一维x第三维,即(3x5),想当与把第二维(4)合并成1个维度,最后的形状可以看成(3x1x5)
print('axis = 1 \n',np.max(array_, 1))
axis = 1
[[92 76 56 98 74]
[78 52 34 85 61]
[75 85 65 85 85]]
np.max(array_, 2),axis=2, 输出的形状就为第一维x第三维,即(3x4),想当与把第三维(5)合并成1个维度,最后的形状可以看成(3x4x1)
print('axis = 2 \n',np.max(array_, 2))
axis = 2
[[56 92 98 65]
[58 85 34 78]
[85 58 85 85]]
总结
三维数组进行切片和函数操作的时候,可以把数组想象成三维空间的元素堆叠而成,按照axis=0、axis=1、axis=2三个方向进行操作,久而久之,便能熟能生巧。