Выражение вашего 2-го случая в терминах транспонирования и отражения:
In [182]: m = np.arange(6).reshape((2,3))
In [183]: m
Out[183]:
array([[0, 1, 2],
[3, 4, 5]])
In [184]: m.transpose(1,0)
Out[184]:
array([[0, 3],
[1, 4],
[2, 5]])
In [185]: m.transpose(1,0)[::-1, :]
Out[185]:
array([[2, 5],
[1, 4],
[0, 3]])
В 3-м случае это похоже на то же самое - с 3-й осью, помеченной вдоль:
In [188]: m.transpose(1,0,2)[::-1, :]
Out[188]:
array([[[ 3, 4, 5],
[ 9, 10, 11]],
[[ 0, 1, 2],
[ 6, 7, 8]]])
Если я укажу 2-ю пару осей, она делает то же самое, но с 1-й парой, идущей вместе для поездки:
In [189]: np.rot90(m, axes=(1,2))
Out[189]:
array([[[ 2, 5],
[ 1, 4],
[ 0, 3]],
[[ 8, 11],
[ 7, 10],
[ 6, 9]]])
In [190]: _.shape
Out[190]: (2, 3, 2)
In [191]: m.transpose(0,2,1)[:,::-1, :]
Out[191]:
array([[[ 2, 5],
[ 1, 4],
[ 0, 3]],
[[ 8, 11],
[ 7, 10],
[ 6, 9]]])
Разные k
требуют разных стратегий.Например, со ставкой 2, я ставлю, что она просто переворачивает.
===
Дисплей Out[188]
не помогает нам визуализировать вращение, поскольку включает плоскости 1-го измерения и 2-го измеренияразмерные ряды.Но если мы выберем столбец 3-го измерения и сравним оригинал и вращение, мы увидим одно и то же 2-мерное вращение:
In [192]: m[:,:,0]
Out[192]:
array([[0, 3],
[6, 9]])
In [193]: Out[188][:,:,0]
Out[193]:
array([[3, 9],
[0, 6]])
3D-массив не всегда представляет собой трехмерную прямоугольную призму.Вместо этого это может быть двухмерное изображение с 3 цветными каналами.Это вращение m
поворачивает изображение без изменения цветов.По умолчанию отображение «плоскость / строка / столбец» не помогает нам визуализировать такое изображение.