“反向”转置/展平

时间:2019-06-27 06:30:10

标签: python arrays numpy

我有一个形状为array data的numpy (3, 3, k),长度k是固定的。 使用以下方法将阵列加工成一维扁平的图像:

mat2 = numpy.transpose(data, (1, 0, 2)).flatten('C')

如何反转此转置/展平过程以获得原始(3, 3, k)的形状和data array的顺序?

1 个答案:

答案 0 :(得分:0)

>>> k = 10
# Generating a `(3, 3, k)` matrix:
>>> a = np.linspace(0, 89, 90).reshape((3, 3, k))
array([[[ 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.]]])

# Doing your transform on it:
>>> b = np.transpose(a, (1, 0, 2)).flatten('C')
array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 30., 31., 32.,
       33., 34., 35., 36., 37., 38., 39., 60., 61., 62., 63., 64., 65.,
       66., 67., 68., 69., 10., 11., 12., 13., 14., 15., 16., 17., 18.,
       19., 40., 41., 42., 43., 44., 45., 46., 47., 48., 49., 70., 71.,
       72., 73., 74., 75., 76., 77., 78., 79., 20., 21., 22., 23., 24.,
       25., 26., 27., 28., 29., 50., 51., 52., 53., 54., 55., 56., 57.,
       58., 59., 80., 81., 82., 83., 84., 85., 86., 87., 88., 89.])

# Reversing the transform:
>>> c = b.reshape((3, 3, k)).transpose((1, 0, 2))
array([[[ 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.]]])

# Figuring out if we did it right:
>>> np.array_equal(a, c)
True