Будьте осторожны при изменении формы.Даже если это работает, расположение элементов может быть не тем, что вы хотите.
Начните с простого массива, который мы можем визуализировать:
In [805]: x = np.arange(24).reshape(3,2,4)
In [806]: x
Out[806]:
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]]])
изменить на (-1,2,1) - но давайте отбросим последнюю 1 для более компактного отображения:
In [807]: x.reshape(-1,2)
Out[807]:
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]])
Обратите внимание, как исходная строка [0,1,2,3] разбивается на 2 строки.
Другаяспособ перераспределения последнего измерения размера 4:
In [808]: np.vstack([x[...,i] for i in range(4)])
Out[808]:
array([[ 0, 4],
[ 8, 12],
[16, 20],
[ 1, 5],
[ 9, 13],
[17, 21],
[ 2, 6],
[10, 14],
[18, 22],
[ 3, 7],
[11, 15],
[19, 23]])
Это может быть понятнее, если мы использовали np.stack
и получили (4,3,2) форму
array([[[ 0, 4],
[ 8, 12],
[16, 20]],
....
x.transpose(2,0,1)
производит то же самое.
reshape
сохраняет упорядоченный / уплощенный порядок элементов.Транспонировать изменения.
In [812]: x.transpose(2,0,1).ravel()
Out[812]:
array([ 0, 4, 8, 12, 16, 20, 1, 5, 9, 13, 17, 21, 2, 6, 10, 14,...])
In [813]: x.reshape(-2,2).ravel()
Out[813]:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, ...])