我有一个形状为array data
的numpy (3, 3, k)
,长度k是固定的。
使用以下方法将阵列加工成一维扁平的图像:
mat2 = numpy.transpose(data, (1, 0, 2)).flatten('C')
如何反转此转置/展平过程以获得原始(3, 3, k)
的形状和data array
的顺序?
答案 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