次元が 15NxM の行列 A があります。つまり、互いに積み重ねられた N 個の異なる 15xM 行列で構成されます。
次元が 1x15 のベクトル B もあります。
私が本当にやりたいことは、単純な行列乗算 B*A(Block) を A の N 個のブロックのそれぞれに対して実行して、最終的に NxM 行列になるようにすることです。
これを行う主な理由は速度を上げることなので、ループを作成せずにこれを行う必要があります。
ありがとう。
次元が 15NxM の行列 A があります。つまり、互いに積み重ねられた N 個の異なる 15xM 行列で構成されます。
次元が 1x15 のベクトル B もあります。
私が本当にやりたいことは、単純な行列乗算 B*A(Block) を A の N 個のブロックのそれぞれに対して実行して、最終的に NxM 行列になるようにすることです。
これを行う主な理由は速度を上げることなので、ループを作成せずにこれを行う必要があります。
ありがとう。
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
か、同様のものを手に入れたら、それがより良い方法かもしれません.