Skip to content

Latest commit

 

History

History
110 lines (97 loc) · 3.82 KB

ch04_多维数组的选取.md

File metadata and controls

110 lines (97 loc) · 3.82 KB

因为多维数组有多个轴,因此选择元素时所用的下标必须使用多个值来表示,在numpy中使用元组作为数组的下标,元组中的每个元素和数组中的每个轴对应。

arr1 = np.arange(24).reshape(2,3,4)
print arr1

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

[[12 13 14 15] [16 17 18 19] [20 21 22 23]]]


例如上面的代码创建了一个2X3X4的多维数组,则表示该数组中有三个轴,也可形象的看成是一个2层楼每层楼3行4列的楼房 在使用切片来选取数组中元素时则必须使用3个值来做为该数组的下标


由于不只道如何用具体的文字描述,下面直接使用代码实例来说明,普通的选取操作

# coding=utf-8
import numpy as np
#选取某一轴索引为N的所有元素
#除了要设置本轴的索引值外,其他轴都用":"附号代替
#如选择第3轴索引为1的所有元素
print arry2[:,:,1] #会将第1层第2列的所有元素做为一个数组[1,5,9]然后合并第2层第2列的所有元素组成的数组[13,17,21]一起组成一个2*3的多维数组[[1 5 9] [13 17 21]]

print arry2[0,:,:] #会将第1层所有元素做为一个数组返回,数组维度为(3*4)

print arry2[:,0,:] #会将第1层第1行的所有元素[ 0  1  2  3]以及第2层第1行的所有元素[12 13 14 15]一起组成一个2*4的多维数组[[ 0  1  2  3]  [12 13 14 15]]

print arry2[0,0,:] #会将第一层第一行的所有元素组成一个数组[0 1 2 3]返回,是个一维数组
#从上面可以看出当某一轴使用":"号来做为下标值时,所取到的数组维度刚好是其相对应的轴的维度的组合




#使用reshape生成一个2*3*4的三维数组 可以形象地把它看做一个两层楼建筑,每层楼有12个房间,并排列成3行4列
arry2 =  np.arange(24).reshape(2,3,4)
print arry2
print "=========取第1层第1行第1列=============="
print arry2[0,0,0]
print "=========取每1层的第1行的第1列=============="
print arry2[:,0,0]
print "=========使用步长=============="
print arry2[0,1,::2]
print "=========取每1层的第2行的第3列=============="
print arry2[:,1,2]
print "=========取第1层的所有=============="
print arry2[0,:,:]
print "======================="
print arry2[0,...]
print "=========取第1层第3排的所有=============="
print arry2[0,2]
print "=========取第1层第3列的所有=============="
print arry2[0,:,2]
print "=========取所有层的第3列的所有=============="
print arry2[:,:,2]
print "=========选取第1层楼的最后一列的所有房间=============="
print arry2[0,:,-1]
print "=========反向选取第1层楼的最后一列的所有房间=============="
print arry2[0,::-1,-1]
print "=========使用步长间隔地选定=============="
print arry2[0,::2,-1]
print "=========维度上翻转元素的顺序=============="
print arry2[::-1]

上面代码依次输出

=========取第1层第1行第1列==============
0
=========取每1层的第1行的第1列==============
[ 0 12]
=========使用步长==============
[4 6]
=========取每1层的第2行的第3列==============
[ 6 18]
=========取第1层的所有==============
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
=======================
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
=========取第1层第3排的所有==============
[ 8  9 10 11]
=========取第1层第3列的所有==============
[ 2  6 10]
=========取所有层的第3列的所有==============
[[ 2  6 10]
 [14 18 22]]
=========选取第1层楼的最后一列的所有房间==============
[ 3  7 11]
=========反向选取第1层楼的最后一列的所有房间==============
[11  7  3]
=========使用步长间隔地选定==============
[ 3 11]
=========维度上翻转元素的顺序==============
[[[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]

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