2

1xmのセル配列A{}があり、配列の各要素はNxN行列と行列W(N1,m)です。
計算する必要があります

Sum(j) = W(j,1)*A{1,1} + W(j,2)*A{1,2}  

そして私は次のことをしています:

for j=1:N1
  sum=false(N);  
  for k=1:m  
    sum = sum + W(j,k)*A{1,k};  
  end  
  Sum(j)=sum  
end

またはもっと視覚的に: ループを使用せずにそれを行う方法はありますか?
Matrix W(let's say N1=2)
|W11 W12||A{1,1}| = |W11*A{1,1} + W12*A{1,2}|
|W21 W22||A{1,2}| = |W21*A{1,1} + W22*A{1,2}|

4

3 に答える 3

0

私はあなたがやろうとしていることについて混乱していますが、私がそれを正しく理解していれば、このコードは機能するはずです:

temp = cell2mat(A);
a_sum = temp*repmat(eye(n),m,1); % this reduces A by performing sum like operation so [1 1 1 3;0 1 0 2]
                                 % becomes [2 4; 0 3]

Sum = W * a_sum
于 2012-07-25T13:56:08.600 に答える
0

また、質問を理解したかどうかもわかりませんが、考慮すべきコードを次に示します。

%# create some data resembling what you described
N = 2;
m = 4;
N1 = 5;
W = rand(N1,m);
A = cell(1,m); for i=1:m, A{i} = rand(N); end

%# do the multiplications
s = cell(N1,1);
for j=1:N1
    AA = cellfun(@times, A, num2cell(W(j,:)), 'UniformOutput',false);
    s{j} = sum(cat(3,AA{:}), 3);
end

セル配列sには、次のような結果が含まれています。

s{j} = W(j,1)*A{1} + W(j,2)*A{2} + ... + W(j,m)*A{m}

したがってs、サイズがN1 x 1のセル配列であり、各セルにはNxNの行列が含まれます。

于 2012-07-25T16:18:18.367 に答える
0

arrayfunforループなしでこれを行うには、次のコマンドをレイプ(式を許します)できます。

w_func = @(j)arrayfun(@(k)(W(j, k) * A{k}), 1:m, 'Un', 0)
sum_func = @(x)sum(cat(3, x{:}), 3)
S = arrayfun(@(j)sum_func(w_func(j)), 1:N1, 'Un', 0);

これにより、からまでSのすべての合計を含むセル配列が生成されます。S{1}S{N1}

于 2012-07-25T18:20:33.563 に答える