在python中转置/旋转矩阵块

ran*_*ght 8 python transpose matrix

我有一个6x6矩阵作为python中的列表列表.矩阵分为4个方块,大小为3x3.我想要一种方法来进行只有1个块的转置.我可以使用传统方法遍历每个元素并将其复制到另一个数组并返回等等但是我想看看是否有更好的方法,(在python中转换矩阵可以在一行中使用拉链方法)

例如,这是矩阵及其块的表示

 block 1  block 2
+-------+-------+
| . . . | . . . |
| . . 2 | 1 . . |
| . . . | . . . |
+-------+-------+
| . . . | . . . |
| . . . | . . . |
| . 1 . | . . . |
+-------+-------+
 block 3  block 4
Run Code Online (Sandbox Code Playgroud)

并旋转(3,右)应导致此

 block 1  block 2
+-------+-------+
| . . . | . . . |
| . . 2 | 1 . . |
| . . . | . . . |
+-------+-------+
| . . . | . . . |
| 1 . . | . . . |
| . . . | . . . |
+-------+-------+
 block 3  block 4
Run Code Online (Sandbox Code Playgroud)

我想找到一个方法,它接收一个块号并只向左或向右旋转该块.有没有简单的方法呢?

unu*_*tbu 5

基于Sven Marnach的使用思路np.rot90,这里有一个顺时针旋转象限的版本(按要求?).在关键步骤

block3[:] = np.rot90(block3.copy(),-1)
Run Code Online (Sandbox Code Playgroud)

a copy()用于右侧(RHS).如果没有copy()指定值block3,则RHS上使用的基础数据也会发生变化.这混淆了后续作业中使用的值.如果没有copy(),则传播多个相同的值block3.

没有副本我没有办法做这个操作.

import numpy as np
a = np.arange(36).reshape(6, 6)
print(a)
# [[ 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]]
block3 = a[3:6, 0:3]

# To rotate counterclockwise
block3[:] = np.rot90(block3.copy())
print(a)
# [[ 0  1  2  3  4  5]
#  [ 6  7  8  9 10 11]
#  [12 13 14 15 16 17]
#  [20 26 32 21 22 23]
#  [19 25 31 27 28 29]
#  [18 24 30 33 34 35]]

# To rotate clockwise
a = np.arange(36).reshape(6, 6)
block3 = a[3:6, 0:3]
block3[:] = np.rot90(block3.copy(),-1)
print(a)
# [[ 0  1  2  3  4  5]
#  [ 6  7  8  9 10 11]
#  [12 13 14 15 16 17]
#  [30 24 18 21 22 23]
#  [31 25 19 27 28 29]
#  [32 26 20 33 34 35]]
Run Code Online (Sandbox Code Playgroud)