2

次元が 15NxM の行列 A があります。つまり、互いに積み重ねられた N 個の異なる 15xM 行列で構成されます。

次元が 1x15 のベクトル B もあります。

私が本当にやりたいことは、単純な行列乗算 B*A(Block) を A の N 個のブロックのそれぞれに対して実行して、最終的に NxM 行列になるようにすることです。

これを行う主な理由は速度を上げることなので、ループを作成せずにこれを行う必要があります。

ありがとう。

4

2 に答える 2

0

A行列をセル配列に 変換できます。まず、セルのサイズを指定するために、行列の次元 (15) の N 要素配列を作成します。

dimArray = repmat(15, 1, N);    % 1xN array of the number 15

次にmat2cell、行列を呼び出してA、各セルが A の 15xM サブ行列であるセル配列に変換します。

newA = mat2cell(A, dimArray);

最後にcellfun、cell 配列を呼び出して乗算を行います。

result = cellfun(@(x) B*x, newA, 'UniformOutput', false);

これにより、マトリックス内の各ブロックresultの結果を含むセル配列が得られます。おそらく、これをすべて 1 行、または多くて 2 行に入れることができます。B*A(block)A

result = cellfun(@(x) B*x, mat2cell(A, repmat(15, 1, N)), 'UniformOutput', false);

ただし、読むのに最も明確なコードではありません。これは、やや回りくどい方法のように思えます。誰かがそれを動作させるrepmatか、同様のものを手に入れたら、それがより良い方法かもしれません.

于 2013-07-09T15:22:53.567 に答える