【发布时间】:2018-02-18 02:20:12
【问题描述】:
我有一堆图像坐标存储在大小为Nx2xHxW 的矩阵中。 “N”表示图像的个数,“H”和“W”是高度和宽度的缩写,这个矩阵的每个nx1xHxW实例都存储了图像n的x和y坐标。
通过创建一个 2x2 旋转矩阵 R 来对 2x1 向量 V 应用旋转:
[[np.cos(theta), -np.sin(theta)],
[np.sin(theta), np.sin(theta)]]
并执行矩阵乘法 R * V,得到一个新的 2x1 向量。
现在我有一个大小为 Nx2x2 的旋转矩阵 R,我想将旋转计算应用于 M 的每个实例。一个简单的方法是:
B = 8
N = 2
H = 100
W = 200
M = np.random.rand(B, N, H, W)
R = np.random.rand(B, N, N)
for i in range(B):
tmp1 = R[i, 0, 0] * M[i, 0, :, :] + R[i, 0, 1] * M[i, 1, :, :]
tmp2 = R[i, 1, 0] * M[i, 0, :, :] + R[i, 1, 1] * M[i, 1, :, :]
M[i, 0, :, :] = tmp1
M[i, 1, :, :] = tmp2
这显然是非常低效的,我想知道在 python 中是否有更好的方法来执行这样的任务。
谢谢!
【问题讨论】:
-
查看 np.matmul
标签: python numpy matrix rotation matrix-multiplication