如何以这种方式重塑 numpy 数组?

How to reshape numpy array in this way?

我想将a整形为b,如何快速完成?

基本上,在整形数组时,如何始终使用每个组中的第一项,然后是第二项,然后是第三项?

输入:

import numpy as np

# 3 repeats, each has 2 variables, each has 4 times
a=np.array([[['r1_v1_t1','r1_v1_t2','r1_v1_t3','r1_v1_t4'],
            ['r1_v2_t1','r1_v2_t2','r1_v2_t3','r1_v2_t4']],

[['r2_v1_t1','r2_v1_t2','r2_v1_t3','r2_v1_t4'],
            ['r2_v2_t1','r2_v2_t2','r2_v2_t3','r2_v2_t4']],

[['r3_v1_t1','r3_v1_t2','r3_v1_t3','r3_v1_t4'],
            ['r3_v2_t1','r3_v2_t2','r3_v2_t3','r3_v2_t4']]
            ])

# 4 times, each has 3 repeats, each has 2 variables
b=np.array([[['r1_v1_t1','r1_v2_t1'],['r2_v1_t1','r2_v2_t1'],['r3_v1_t1','r3_v2_t1']],
[['r1_v1_t2','r1_v2_t2'],['r2_v1_t2','r2_v2_t2'],['r3_v1_t2','r3_v2_t2']],
[['r1_v1_t3','r1_v2_t3'],['r2_v1_t3','r2_v2_t3'],['r3_v1_t3','r3_v2_t3']],
[['r1_v1_t4','r1_v2_t4'],['r2_v1_t4','r2_v2_t4'],['r3_v1_t4','r3_v2_t4']]])

# 4 times, each has 2 variables, each has 3 repeats
#print(a.T)

#print(np.reshape(a,(4,3,2), order='F')) not work
#print(np.reshape(a,(4,3,2))) not work

您可以交换数组的轴,使 a 的形状与 b 的形状匹配。 Numpy 的 swapaxes 可以实现这个:

new_a = np.swapaxes( np.swapaxes(a,0,2) ,1,2)

你可以测试这个 new_a 等价于 b:

print (new_a == b).all()  # True

这是一个有效的 gist