这不是行主要与列主要的问题。这是一个与性能有关的计算顺序问题,基于矩阵乘法的关联属性:A(BC)=(AB)C
如果我有 2 个矩阵,A
和B
,和一个向量v
,并且我想以特定顺序将它们全部相乘,例如ABv
,我可以做(AB)v
or A(Bv)
。
在我看来,以编程方式,如果我使用第二种方法并始终将矩阵与向量相乘,我可以从更少的计算中获得更好的性能。
例如,如果我们正在处理 4x4 矩阵:
AB
结果 16 个单独的计算,一个新的矩阵,每个结果都来自一个点积
Matrix*vector
产生 4 个计算,每个计算来自一个点积
所以:
(AB)v
是 16+4 点积计算=20
A(Bv)
是两个矩阵向量积,或 4+4 点积计算 = 8
我的想法正确吗?这表明如果我每次都从向量开始,执行许多这样的向量矩阵表达式会显着提高性能?
因此,构造一个基于向量*矩阵从左到右计算顺序执行的矩阵库是有意义的(即使您选择使用列主要格式从右到左表示),因为将向量乘以矩阵乘积是在图形中很常见。