a = np.arange(120).reshape(2,3,4,5)
得到shape为(2,3,4,5)的高维数组a,输出a为:
[[[[ 0 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 37 38 39]]
[[ 40 41 42 43 44]
[ 45 46 47 48 49]
[ 50 51 52 53 54]
[ 55 56 57 58 59]]]
[[[ 60 61 62 63 64]
[ 65 66 67 68 69]
[ 70 71 72 73 74]
[ 75 76 77 78 79]]
[[ 80 81 82 83 84]
[ 85 86 87 88 89]
[ 90 91 92 93 94]
[ 95 96 97 98 99]]
[[100 101 102 103 104]
[105 106 107 108 109]
[110 111 112 113 114]
[115 116 117 118 119]]]]
假如我要输出a[:,2,:,4]
,从后往前看就是,取出最后一维的第4列(红色框),取出第2维所有列,取出第1维的第2列(黄色框),取出第0维的所有列。
最后输出的结果就是红黄框交界的地方的值:
[[ 44, 49, 54, 59],
[104, 109, 114, 119]]
同时也可以看到,输出结果的shape变成了两维。因此对于一个numpy多维array,[:,:,:,:,...,:]
,将多少个“:”替换为具体的值,最后的结果就降低几维。
总结技巧:shape为[2,3,4,5]; 从维度考虑,可以从后往前看(5-->4-->3-->2),一层中括号内有5个元素;双层中括号内包含四个一维数组;三层中括号包含3个二维数组;四层中括号包括两个3维数组。
从元素考虑,从内部往外拔;最里面5个元素组成一维数组;然后往外,四个一维数组组成一个二维数组;再往外,三个二维数组组成一个三维数组;最后,两个三维数组组成一个四维数组。