详解Python二维数组与三维数组切片的方法
如果对象是二维数组,则切片应当是x[:]的形式,里面有一个冒号,冒号之前和之后分别表示对象的第0个维度和第1个维度;
如果对象是三维数组,则切片应当是x[::],里面有两个冒号,分割出三个间隔,三个间隔的前、中和后分别表示对象的第0、1、2个维度。
x[n,:]、x[:,n]、x[m:n,:]、x[:,m:n]
上面的中括号中(m:n)应当看成一个整体,除了(m:n)之外的冒号就是用来表明在哪个维度上操作的。
对于二维数组,在冒号前面的(n,)意味着对二维数组的第0个维度上的第n号元素操作,在冒号后面的(,n)意味着对二维数组的第1个维度上的第n号元素进行操作。如果n替换成(m:n)则表示对第m号到第n-1号元素操作。
举例:
importnumpyasnp a=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]]) print(a.shape) print(a[0,:],a[0,:].shape) print(a[1,:],a[1,:].shape) print(a[-1,:],a[-1,:].shape) print(a[0:2,:],a[0:2,:].shape) print(a[:,0],a[:,0].shape) print(a[:,1],a[:,1].shape) print(a[:,-1],a[:,-1].shape) print(a[:,0:2],a[:,0:2].shape)
运行结果如下:
(5,4) [1234](4,) [5678](4,) [17181920](4,) [[1234] [5678]](2,4) [1591317](5,) [26101418](5,) [48121620](5,) [[12] [56] [910] [1314] [1718]](5,2) Processfinishedwithexitcode0
上例中,a是shape=(5,4)的数组。第0个维度上有5个元素,第1个维度上有4个元素(元素不一定是单个值,也可能是数组,这里的元素的叫法是相对于某个维度而言的)。
- a[0,:]、a[1,:]、a[-1,:]分别提取了a的第0个维度上的第0、1和-1个元素,每个元素都是一个含有4个元素的数组。
- a[0:2,:]提取了a的第0个维度上的第0和1两个元素,两个元素都是一个含有4个元素的数组,共同组成一个二维数组。
- a[:,0]、a[:,1]、a[:,-1]分别提取了a的第1个维度上的0、1和-1个元素,每个元素都是单个元素值。
- a[:,0:2]提取了a的第1个维度上的第0和1两个元素,两个元素都是单个元素值,共同组成一个二维数组。
x[n,::]、x[:,n:]、x[::,n]、x[:,:,n]、x[m:n,::]、x[:,m:n:]、x[::,m:n]、x[:,:,m:n]
上面的中括号中(m:n)应当看成一个整体,除了(m:n)之外的两个冒号就是用来表明在哪个维度上操作的。
对于三维数组,在双冒号的最前面的(n,)意味着对三维数组的第0个维度上的第n号元素操作,在双冒号的中间的(,n)意味着对三维数组的第1个维度上的第n号元素进行操作,在双冒号的后面的(,n)意味着对三维数组的第2个维度上的第n号元素进行操作。如果n替换成(m:n)则表示对第m号到第n-1号元素操作。
举例:
importnumpyasnp 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[0,::],b[1,::],b[-1,::],b[0:2,::]") 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) print("b[:,0:],b[:,1:],b[:,-1:],b[:,0:2:]") 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) print("b[::,0],b[::,1],b[::,-1],b[::,0:2:]") 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) print("b[:,:,0],b[:,:,1],b[:,:,-1],b[:,:,0:2:]") 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)
运行结果如下:
(3,3,4) b[0,::],b[1,::],b[-1,::],b[0:2,::] [[1234] [5678] [9101112]](3,4) [[13141516] [17181920] [21222324]](3,4) [[25262728] [29303132] [33343536]](3,4) [[[1234] [5678] [9101112]] [[13141516] [17181920] [21222324]]](2,3,4) b[:,0:],b[:,1:],b[:,-1:],b[:,0:2:] [[[1234] [5678] [9101112]] [[13141516] [17181920] [21222324]] [[25262728] [29303132] [33343536]]](3,3,4) [[[5678] [9101112]] [[17181920] [21222324]] [[29303132] [33343536]]](3,2,4) [[[9101112]] [[21222324]] [[33343536]]](3,1,4) [[[1234] [5678]] [[13141516] [17181920]] [[25262728] [29303132]]](3,2,4) b[::,0],b[::,1],b[::,-1],b[::,0:2:] [[1234] [13141516] [25262728]](3,4) [[5678] [17181920] [29303132]](3,4) [[9101112] [21222324] [33343536]](3,4) [[[1234] [5678]] [[13141516] [17181920]] [[25262728] [29303132]]](3,2,4) b[:,:,0],b[:,:,1],b[:,:,-1],b[:,:,0:2:] [[159] [131721] [252933]](3,3) [[2610] [141822] [263034]](3,3) [[4812] [162024] [283236]](3,3) [[[12] [56] [910]] [[1314] [1718] [2122]] [[2526] [2930] [3334]]](3,3,2) Processfinishedwithexitcode0
上例中,b是shape=(3,3,4)的数组。第0个维度上有3个元素,第1个维度上有3个元素,第2个维度上有4个元素(元素不一定是单个值,也可能是数组,这里的元素的叫法是相对于某个维度而言的)。
- b[0,::]、b[1,::]、b[-1,::]分别提取了b的第0个维度上的第0、1和-1个元素,每个元素都是一个二维数组。
- b[0:2,::]提取了b的第0个维度上的第0和1两个元素,两个元素都是一个二维数组,共同组成一个三维数组。
- b[:,0:]、b[:,1:]、b[:,-1:]分别提取了b的全部元素(都是由4个元素的单个数组)、b的第1个维度上除第0号外的所有元素(都是由4个元素的单个数组)、b的第1个维度上的所有最后一个位置上的元素(都是由4个元素的单个数组)。
- b[:,0:2:]提取了b的第1个维度上的第0和1两个元素,两个元素都是一个有4个元素的数组,共同组成一个三维数组。
- b[::,0]、b[::,1]、b[::,-1]分别提取了b的第2个维度上的0、1和-1个元素(这里的元素就是单个有4个元素的数组),每个元素都是有4个元素的数组。
- b[::,0:2]提取了b的第2个维度上的第0和1两个元素(这里的元素就是单个有4个元素的数组),两个元素都是有4个元素的数组。
- b[:,:,0]、b[:,:,1]、b[:,:,-1]分别提取了b的第2个维度的所有元素(即有4个元素的数组)中的第0、1和-1个元素值,每个元素都是单个元素值。
- b[:,:,0:2]提取了b的第2个维度的所有元素(即有4个元素的数组)中的第0和1两个元素值,两个元素都是单个元素值。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。