numpy三维数据reshape的一些问题

令人抓狂的reshape

在使用numpy时,难免要对数据的shape进行改变。

假设现在有一个numpyarray,如下所示,表示创建一个0~10的形状为(2, 10, 4)的数组。

a = np.random.randint(0, 10, (2, 5, 4))

其中a是:

array([[[6, 5, 3, 0],
        [1, 9, 7, 1],
        [2, 2, 9, 1],
        [9, 8, 3, 5],
        [4, 0, 2, 5]],

       [[7, 0, 0, 7],
        [7, 9, 6, 0],
        [7, 9, 4, 4],
        [0, 8, 2, 2],
        [8, 2, 7, 7]]])

我需要做的是(抽象图):
在这里插入图片描述发现numpy中的reshape好像做不到?其中提供了order参数,包括'A', 'C', 'F',这里其他好多博客都介绍了,目前我达不到我想要的效果。

发现使用np.concatenatereshape函数的'F'模式进行组合,可以达到效果。大致思路是这样(见蓝色部分):
()也就是把a的两个维度拼起来然后用reshape'F'模式进行形状的改变,代码如下

np.concatenate((a[0], a[1]), axis=0).reshape((5, 2, 4), order="F")

结果

array([[[6, 5, 3, 0],
        [7, 0, 0, 7]],

       [[1, 9, 7, 1],
        [7, 9, 6, 0]],

       [[2, 2, 9, 1],
        [7, 9, 4, 4]],

       [[9, 8, 3, 5],
        [0, 8, 2, 2]],

       [[4, 0, 2, 5],
        [8, 2, 7, 7]]])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值