5

以下をベクトル化する方法はありますか:

    for i = 1:6
        te = k(:,:,:,i).*(c(i));
    end

私は、独立した (3D 行列 * スカラー) 操作に分割することにより、4D 行列 k をベクトル c で乗算しようとしています。この関数ファイルの while ループ内には、回避できない他の 2 つの for ループが既にあり、ループを回避するために最善を尽くしています。

これに関する洞察は大歓迎です!

-SC

4

2 に答える 2

5

MTIMESXを使用してこれを行うことができます。MTIMESX は、Matlab のファイル交換にある James Tursa による多次元サポートを備えた高速行列乗算ツールです。

次のように簡単です。

C = mtimesx(A,B) 

計算を実行します C = A * B

于 2013-07-12T03:35:16.613 に答える
1

何かが欠けていない限り、これは bsxfun の場合です。

te=bsxfun(@times, k, permute(c,[3 4 1 2])); % c is a row vector

または

te=bsxfun(@times, k, permute(c,[3 4 2 1])); % c is a column vector

これは、k の 4 次元が c と同じサイズであると仮定しています。そうでない場合は、サブマトリックス インデックスを使用できます。

te=bsxfun(@times, k(:,:,:,1:length(c)), permute(c,[3 4 2 1])); % c is a column vector
于 2013-07-12T10:45:04.230 に答える