- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个 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/
我已经在 jQuery transit 中加载了,我确定我是在加载 jQuery 之后才做的,但我仍然得到这个错误: 我查看了 Chrome 中的资源面板,在 jQuery 之后加载了 jQuery
我目前收到一个字符串,例如 Hello there my\r\nName is\r\nJohn Smith\r\nand\r\nstuff 我想将每一行放在一个新列表项...例如: 期望的结果(带有单
我正在尝试使用 MapKit 路线请求获取两个坐标之间的交通路线。 当我切换到其他(非 Transit)类型时,下面的代码可以工作,但是当我切换到 Transit 时,它会抛出一个错误,这个错误在 A
我是一名优秀的程序员,十分优秀!