在与矩阵相乘时,我试图摆脱一些for
循环。 aa
代表3x3
变换矩阵,bb
代表点坐标nx3
,其中n
是点数。
使用:
aa = np.matrix([[1,2,3],[1,2,3],[1,2,3]])
bb = np.matrix([[1,1,1],[2,2,2],[3,3,3]])
np.tile(aa,(3,1))*bb.ravel().T
我得到:
ValueError: shapes (9,3) and (9,1) not aligned: 3(dim 1) != 9 (dim 0)
在这种情况下,预期输出将为 long 列矩阵[[6],[6],[6],[12],[12],[12],[18],[18],[18]]
。在这种情况下,3x3
:[[6,6,6],[12,12,12],[18,18,18]]
应该是哪个最终形状。
编辑:脱离了一般性描述。
点数为n
,只有一个3x3
矩阵。它的向量化问题如下:
points = bb
T = aa
pointsNewPos = []
for point in points:
pointNewPosition = T*point.T
pointsNewPos.append(pointNewPosition.T)
答案 0 :(得分:0)
在这种情况下,至少可以提供所需的输出。没有更多信息,很难确保它是通用的。
import numpy as np
aa = np.array([[1,2,3],[1,2,3],[1,2,3]])
bb = np.array([[1,1,1],[2,2,2],[3,3,3],[4,4,4]])
result = b.dot(aa.T)
答案 1 :(得分:0)
这听起来像是np.einsum的一项工作,它使您可以使用输入矩阵的任意维度进行矩阵乘法。
假设您想将bb
的每一行用作列向量,然后将其(以行大写方式)乘以aa
,然后旋转一下:
cc = np.einsum('ij,kj -> ki', bb, aa)