Closed. This question needs to be more focused。它当前不接受答案。
想要改善这个问题吗?更新问题,使它仅关注editing this post的一个问题。
1年前关闭。
Improve this question
这不是行主要问题还是列主要问题。根据矩阵乘法的关联属性,这是与性能有关的计算问题的顺序:
如果我有2个矩阵
通过编程,我发现,如果我使用第二种方法并且始终将矩阵与向量相乘,则可以通过更少的计算获得更好的性能。
例如,如果我们处理的是4x4矩阵:
所以:
我在想正确吗?这表明,如果我每次都从向量开始,执行许多这样的向量矩阵表达式将极大地提高性能?
因此,构造一个基于矢量*矩阵从左到右的计算顺序执行的矩阵库是有意义的(即使您选择使用列主格式从右到左注释),因为将矢量乘以矩阵乘积是在图形中非常常见。
想要改善这个问题吗?更新问题,使它仅关注editing this post的一个问题。
1年前关闭。
Improve this question
这不是行主要问题还是列主要问题。根据矩阵乘法的关联属性,这是与性能有关的计算问题的顺序:
A(BC)=(AB)C
如果我有2个矩阵
A
和B
,以及一个向量v
,并且我想按一定顺序将它们全部相乘,例如ABv
,则可以执行(AB)v
或A(Bv)
。通过编程,我发现,如果我使用第二种方法并且始终将矩阵与向量相乘,则可以通过更少的计算获得更好的性能。
例如,如果我们处理的是4x4矩阵:
AB
可进行16个单独的计算,一个新的矩阵,每个结果均来自一个点积Matrix*vector
产生4个计算,每个计算都来自一个点积所以:
(AB)v
是16 + 4点乘积计算= 20A(Bv)
是两个矩阵向量乘积,或4 + 4点乘积计算= 8我在想正确吗?这表明,如果我每次都从向量开始,执行许多这样的向量矩阵表达式将极大地提高性能?
因此,构造一个基于矢量*矩阵从左到右的计算顺序执行的矩阵库是有意义的(即使您选择使用列主格式从右到左注释),因为将矢量乘以矩阵乘积是在图形中非常常见。
最佳答案
在矩阵的单个运算和单个向量涉及的有限上下文中,您和tmyklebu正确无误。但是,在实际应用之前,通常需要了解更大的上下文。该问题围绕 A 和 B 相对于v更改频率的更改而变化。如果 A 和 B 与v相比是相对静态的(它们不经常更改),则最好预先计算 AB 并将其应用于v恰好具有的任何值。
此外,在实践中,存在一些由多个向量组成的几何图形,可以通过首先计算 AB ,然后将该转换应用于几何图形中的所有矢量,来更有效地进行变换和计算。
关于math - 向量矩阵的乘法顺序会影响性能吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16952546/