python知识点补充:元组的维度问题(多维元组),如何判断元组几维

看这个:相互转化

三维数组x,x.shape是(2,6,2)。
在这里插入图片描述
其中第一个维度有两个元素,(第一个大括号里的)
第一个元素是[[0,2],[1,2],[1,3],[1,4],[2,1],[3,2]];
第二个元素是[[1,1],[2,2],[3,3],[4,4],[5,5],[6,6]];

第二个维度是指第一维度的每一个元素单独进行细分,
即在第一维度第一个元素上的第二维度元素有六个分别是[0,2],[1,2],[1,3],[1,4],[2,1],[3,2];
第一维度第二个元素上的第二维度元素也有六个分别是[1,1],[2,2],[3,3],[4,4],[5,5],[6,6];
第三维度同理,所以在第一维度第一个元素的第二维度的第一个元素上的第三维度的元素有两个即0,2;其他同理。

  1. x[n]:指第一维度的第n个元素
    在这里插入图片描述
  2. x[:,n]
    前面有两个括号,就是两维。在这里插入图片描述
    对应
    a[第0维,第1维,第2维,第3维]
    a[:,2]的输出是[2 5 8]。注意是a[:,2]而不是a[:2],有个逗号在里面,这是对维度进行操作的显著标志。怎么理解呢?在这种情况下,把“:”理解为all,然后从后往前看可能会更清晰一点。比如在a[:,2]中,从后往前看2表示取出第1维的第2列,“:”表示取出第0维的所有列。这样就会得到[2 5 8]
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[第0维,第1维,第2维,第3维]
假如我要输出a[:,2,:,4],从后往前看就是,取出最后一维(第三维)的第4列(红色框),取出第2维所有列,取出第1维的第2列(黄色框),取出第0维的所有列
在这里插入图片描述
最后输出的结果就是红黄框交界的地方的值:

[[ 44,  49,  54,  59],
 [104, 109, 114, 119]]

同时也可以看到,输出结果的shape变成了两维。因此对于一个numpy多维array,[:,:,:,:,…,:],将多少个“:”替换为具体的值,最后的结果就降低几维

  1. “…”在numpy中的操作
    可以看作是对x的复制,而不是x本身

  2. “…”在numpy中的操作
    “…”在什么地方出现呢,当你要处理的多维array维度过高,而且你只处理其中的前几维或后几维,那么剩下的维度,就可以用“…”代替了。比如a[1,…]就是将a第0维的第1列取出,得到

[[[ 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]]]

更多可见:here1here2

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值