python - 在 python 中转置/旋转矩阵 block

标签 python matrix transpose

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

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

 block 1  block 2
+-------+-------+
| . . . | . . . |
| . . 2 | 1 . . |
| . . . | . . . |
+-------+-------+
| . . . | . . . |
| . . . | . . . |
| . 1 . | . . . |
+-------+-------+
 block 3  block 4

和 rotate(3, right) 应该导致这个

 block 1  block 2
+-------+-------+
| . . . | . . . |
| . . 2 | 1 . . |
| . . . | . . . |
+-------+-------+
| . . . | . . . |
| 1 . . | . . . |
| . . . | . . . |
+-------+-------+
 block 3  block 4

我想找到一种方法,它接受一个 block 号并只向左或向右旋转该 block 。有什么简单的方法吗?

最佳答案

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

block3[:] = np.rot90(block3.copy(),-1)

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]]

关于python - 在 python 中转置/旋转矩阵 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8087485/

相关文章:

python - Tornado 中的 Django 用户

python - 将多个列表映射到字典

python - 求解线性系统的 sympy 问题

matlab - 将矩阵因式分解为初等矩阵

google-sheets - 将换行符中的字符串列表转换为 Google 表格中的单独行

python - 更改不正确的python路径ubuntu

python - 将文件移动到子目录时出现 os.rename 路径错误

python - 如何从 Numpy 矩阵中的每一列获取值

sql - 如何在 BigQuery 中取消透视?

Javascript 等效于 Python 的 zip 函数