5

これは、行優先と列優先の問題ではありません。これは、行列乗算の連想特性に基づいた、パフォーマンスに関する計算問題の順序です。A(BC)=(AB)C

2 つの行列 とABベクトルvがあり、特定の順序でそれらをすべて乗算したい場合、たとえば、またはABvを実行できます。(AB)vA(Bv)

2 番目の方法を使用し、常に行列にベクトルを乗算すると、はるかに少ない計算でパフォーマンスが向上することが、プログラムで思い浮かびます。

たとえば、4x4 行列を扱っている場合:

AB16 の個別の計算、新しい行列、各結果は内積から得られます

Matrix*vectorそれぞれ内積から 4 つの計算が行われます

したがって:

(AB)vは 16+4 内積計算 = 20

A(Bv)2 つの行列ベクトル積、または 4+4 内積計算 = 8 です。

私は正しく考えていますか?これは、毎回ベクトルから開始すると、このような多くのベクトル行列式を実行すると、パフォーマンスが劇的に向上することを示唆していますか?

したがって、vector*matrix の左から右への計算順序に基づいて実行する行列ライブラリを構築することは理にかなっています (列優先の書式設定で右から左への表記を選択した場合でも)。グラフィックでは非常に一般的です。

4

2 に答える 2

3

あなたの考えは正しいです、はい。一連の行列を乗算する最適な方法を見つけることは、動的計画法を使用して解決できる問題の有名な例です。

于 2013-06-06T03:49:25.093 に答える