これは、行優先と列優先の問題ではありません。これは、行列乗算の連想特性に基づいた、パフォーマンスに関する計算問題の順序です。A(BC)=(AB)C
2 つの行列 とA
とB
ベクトルv
があり、特定の順序でそれらをすべて乗算したい場合、たとえば、またはABv
を実行できます。(AB)v
A(Bv)
2 番目の方法を使用し、常に行列にベクトルを乗算すると、はるかに少ない計算でパフォーマンスが向上することが、プログラムで思い浮かびます。
たとえば、4x4 行列を扱っている場合:
AB
16 の個別の計算、新しい行列、各結果は内積から得られます
Matrix*vector
それぞれ内積から 4 つの計算が行われます
したがって:
(AB)v
は 16+4 内積計算 = 20
A(Bv)
2 つの行列ベクトル積、または 4+4 内積計算 = 8 です。
私は正しく考えていますか?これは、毎回ベクトルから開始すると、このような多くのベクトル行列式を実行すると、パフォーマンスが劇的に向上することを示唆していますか?
したがって、vector*matrix の左から右への計算順序に基づいて実行する行列ライブラリを構築することは理にかなっています (列優先の書式設定で右から左への表記を選択した場合でも)。グラフィックでは非常に一般的です。