Closed. This question needs to be more focused。它当前不接受答案。












想要改善这个问题吗?更新问题,使它仅关注editing this post的一个问题。

1年前关闭。



Improve this question




这不是行主要问题还是列主要问题。根据矩阵乘法的关联属性,这是与性能有关的计算问题的顺序:A(BC)=(AB)C
如果我有2个矩阵AB,以及一个向量v,并且我想按一定顺序将它们全部相乘,例如ABv,则可以执行(AB)vA(Bv)

通过编程,我发现,如果我使用第二种方法并且始终将矩阵与向量相乘,则可以通过更少的计算获得更好的性能。

例如,如果我们处理的是4x4矩阵:
AB可进行16个单独的计算,一个新的矩阵,每个结果均来自一个点积
Matrix*vector产生4个计算,每个计算都来自一个点积

所以:
(AB)v是16 + 4点乘积计算= 20
A(Bv)是两个矩阵向量乘积,或4 + 4点乘积计算= 8

我在想正确吗?这表明,如果我每次都从向量开始,执行许多这样的向量矩阵表达式将极大地提高性能?

因此,构造一个基于矢量*矩阵从左到右的计算顺序执行的矩阵库是有意义的(即使您选择使用列主格式从右到左注释),因为将矢量乘以矩阵乘积是在图形中非常常见。

最佳答案

在矩阵的单个运算和单个向量涉及的有限上下文中,您和tmyklebu正确无误。但是,在实际应用之前,通常需要了解更大的上下文。该问题围绕 A B 相对于v更改频率的更改而变化。如果 A B 与v相比是相对静态的(它们不经常更改),则最好预先计算 AB 并将其应用于v恰好具有的任何值。

此外,在实践中,存在一些由多个向量组成的几何图形,可以通过首先计算 AB ,然后将该转换应用于几何图形中的所有矢量,来更有效地进行变换和计算。

关于math - 向量矩阵的乘法顺序会影响性能吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16952546/

10-11 22:24
查看更多