MATLABに行列乗算を実行させたいと思います。行列乗算は、すべての乗算演算がプラス演算に置き換えられます。ここで matlabの行列乗算を変更する
は一例です:a = [3,4; 5,6];
b = [1;2];
c = modified_multiplication(a,b); % = [3+1+4+2 ; 5+1+6+2] = [10 , 14].
どのように私は、元の*動作ほど効率的にこれを行うことができますか?
MATLABに行列乗算を実行させたいと思います。行列乗算は、すべての乗算演算がプラス演算に置き換えられます。ここで matlabの行列乗算を変更する
は一例です:a = [3,4; 5,6];
b = [1;2];
c = modified_multiplication(a,b); % = [3+1+4+2 ; 5+1+6+2] = [10 , 14].
どのように私は、元の*動作ほど効率的にこれを行うことができますか?
bsxfun
とsum
を組み合わせることをおすすめします。
c = sum(bsxfun(@plus, a, b.'), 1);
% 10 14
bsxfun
コールは..等
bsxfun(@plus, a, b.')
% 4 6
% 6 8
を
a
の最初の行のすべての要素と
a
の2行目のすべての要素に
b
の2番目のエントリに
b
の最初のエントリを追加します
次に、sum
のアプリケーションは、列を合計します。 a
任意のサイズのb
について
次のように行うことができる。
c = bsxfun(@plus, sum(a,2), sum(b,1));
これは添加の連想性を利用する:第一に、a
のとb
の各列の各列の和を計算しますすべてのペアごとの加算を計算します。
ありがとうございます!実際には、c = sum(bsxfun(@plus、a、b。 ')、2);私が欲しいものを私に与えてくれます。 –