reshape和transpose的区别

reshape填充的顺序,从最后一个维度开始赋值。 

transpose与reshape的最大区别:

reshape修改的只是维度,填充顺序不变

transpose修改的是轴,填充顺序改变

anchor_target_layer:

bbox_targets = bbox_targets.reshape((1, height, width, A * 4)).transpose(0, 3, 1, 2):

下面的例子是在caffe版本的,pytorch的同理:

all_anchors = all_anchors.view(h*w * 9, 4)

bbox_targets.ndim  (h*w * A , 4)_>(1, height, width, A * 4),只有相邻的hwA4你才能随意拆开然后和左右重组。

bbox_targets = bbox_targets.reshape((1, height, width, A * 4)).transpose(0, 3, 1, 2)#1  9*4 h w

 

再来anchor_target_layer中np.meshgrid后ravel然后vstack再transpose得到的shifts为例。

直观的看:shifts.ndim=(H*W,4),注意我写的是H*W,而不是W*H。

因为它是逐行添加的,具体可看下面x对应w,y对应h,填充y=0第一行,所有列,然后填充第二行。

x0y0x1y1
0000
1010
2020
............
0101
1111
2121
............

      因为填充方式的问题,先填充后维度的,所以shifts.reshape(h,w,4)可以理解为:第i行填充了所有列,然后填充i+1行所有列。

      但是,不可以shifts.reshape(w,h,4),因为这样的理解是:第i列填充了所有行,然后填充所有列。

      你只可以shifts.reshape(h,w,4).transpose(1,0,2),这里又涉及到transposetranspose(1,0,2)表示原先的第1维作为现在的0维,原先的第0维作为现在的第1维,第二维不变。
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值