2012-07-25 103 views
2

的元素我有一個1xm單元陣列A{},與所述陣列是NxN矩陣和矩陣W(N1,m)的每個元素。
我需要計算乘法細胞與基質Matlab的

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}|

是否有這樣做不使用循環的方法嗎?

+2

什麼'M'?是不是隻是'2'?是'N1'和'N'的意思是相同的變量?我認爲你正在使用'N'在此表示兩回事 – Drodbar 2012-07-25 11:31:16

+1

不知道我理解的數據結構,你能發佈一些代碼,定義了兩個元素? – Thor 2012-07-25 11:43:56

回答

0

爲了做到這一點而不for循環,可以強姦(原諒表達)的arrayfun命令:

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{1}S{N1}單元陣列S

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 
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-通過-1,其中每個單元包含一個N×N的矩陣

+0

你還有一個'for'環... – 2012-07-25 18:19:27

+0

@EitanT:雙迴路真的,如果算上CELLFUN :)我只是想,我提出了一個可行的解決方案。這樣OP可以確認它是否給出預期的輸出。 – Amro 2012-07-25 18:22:05

+0

我認爲for循環比'arrayfun'或'cellfun'慢,所以它不是相同的循環。但是是啊:) – 2012-07-25 18:24:19