【发布时间】:2018-08-17 09:04:07
【问题描述】:
在矩阵相乘时,我试图摆脱一些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)
【问题讨论】:
-
预期输出是多少?另外,请注意
matrix几乎被认为已弃用,它们鼓励您转向多维ndarray -
感谢提醒,不知道。预期输出与使用 for 循环相同。在这种情况下,它将是长列矩阵 [[6],[6],[6],[12],[12],[12],[18],[18],[18]]。最终的形状应该是 3x3:[[6,6,6],[12,12,12],[18,18,18]]。关于结果应该是什么样子的好点,我将其添加到问题中。
-
@ForceBru 我认为对于矩阵,“*”运算符 == np.dot。
-
@c4da,对,我不知何故没有注意到这些实际上是
np.matrix,而不是ndarray,哎呀
标签: python vectorization matrix-multiplication