为了账号安全,请及时绑定邮箱和手机立即绑定

将 3D 数组重塑为 2D 数组 Python

将 3D 数组重塑为 2D 数组 Python

慕姐4208626 2021-11-02 17:17:36
如果我有这样的 ([4,3,3]) 3D 数组:[[0,1,2]   [[9,10,11 ]    [[18,19,20]   [[27,28,29]  [3,4,5]    [12,13,14]     [21,22,23]    [30,31,32] [6,7,8]] , [15,16,17]] ,  [24,25,26]] , [33,34,35]]我将如何将其转换为这样的 ([6,6]) 二维数组,以便数组的第一半位于 160x160 的上半部分,而第二半位于底部:[[0,1,2,9,10,11][3,4,5,12,13,14][6,7,8,15,16,17][18,19,20,27,28,29] [21,22,23,30,31,32][24,25,26,33,34,35]]我的阵列创建:qDCTReversed = np.zeros((400,8,8), dtype=np.int)我需要一个 (160,160) 数组。
查看完整描述

3 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

使用无for循环的一种非常快速的单行解决方案是这样的:


# initialization

qDCTReversed = np.arange(4*3*3).reshape((4,3,3)) 


# calculation

qDCTReversed = qDCTReversed.reshape((2,2,3,3)).transpose((0,2,1,3)).reshape((6,6))

或对于(400,8,8)数组:


qDCTReversed.reshape((20,20,8,8)).transpose((0,2,1,3)).reshape((160,160))

速度对比:

Mstaino 的回答:0.393 毫秒

yatu 的回答:0.138 毫秒

这个答案:0.016 毫秒


查看完整回答
反对 回复 2021-11-02
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

您要求的重塑可以通过以下方式完成:


x = np.arange(36).reshape((4,3,3))

np.vstack(np.hstack(x[2*i:2+2*i]) for i in range(x.shape[0]//2))

>>array([[ 0,  1,  2,  9, 10, 11],

   [ 3,  4,  5, 12, 13, 14],

   [ 6,  7,  8, 15, 16, 17],

   [18, 19, 20, 27, 28, 29],

   [21, 22, 23, 30, 31, 32],

   [24, 25, 26, 33, 34, 35]])


查看完整回答
反对 回复 2021-11-02
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

您可以通过循环遍历列表来做到这一点:


a = [[[ 0, 1, 2], [ 9,10,11]],

     [[ 3, 4, 5], [12,13,14]],

     [[ 6, 7, 8], [15,16,17]],

     [[18,19,20], [27,28,29]],

     [[21,22,23], [30,31,32]],

     [[24,25,26], [33,34,35]]]


b = [[i for j in k for i in j ] for k in a]

print(b)

输出:


[ 0,  1,  2,  9, 10, 11]

[ 3,  4,  5, 12, 13, 14]

[ 6,  7,  8, 15, 16, 17]

[18, 19, 20, 27, 28, 29]

[21, 22, 23, 30, 31, 32]

[24, 25, 26, 33, 34, 35]


查看完整回答
反对 回复 2021-11-02
  • 3 回答
  • 0 关注
  • 220 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信