2013-03-08 59 views
0

鑑於矩陣M(x倍5)和結構thr,其中包含數字,我怎麼能做下面的過程沒有循環?使用structfun不可能有2個結構。使用arrayfun不可能分配給我的結構index。另外cellfun是不正確的。任何人的幫助?MATLAB:在沒有循環的2個結構上重寫相同的操作?

預先感謝您!

index.b = M(:,1) >= thr.b; 
index.c = M(:,2) >= thr.c; 
index.h = M(:,3) >= thr.h; 
index.r = M(:,4) >= thr.r; 
index.s = M(:,5) >= thr.s; 
+1

也許結構不是最好的數據結構呢?爲什麼不'I = M> T'其中'T(:, 1)= thr.b'等......? – Dan 2013-03-08 12:31:04

+0

謝謝@丹,這個想法並不壞。但它不像上面那樣計算。到「M」的每一列的鏈接都會丟失。應該是'M(:1)> T(1)' – Massoud 2013-03-08 14:07:48

+1

不,我建議'size(M)== size(T)'so'T = repmat([thr.b,thr.c,thr。 h,...],size(M,1),1)'例如 – Dan 2013-03-08 14:25:13

回答

0

如果你真的需要保留你的數據結構,因爲他們在這裏是一個解決方案。

首先,讓我們創建虛擬輸入:

M = rand(5); 
index = struct('b',[],'c',[],'h',[],'r',[],'s',[]); 
thr = struct('b',.5,'c',.5,'h',.5,'r',.5,'s',.5); 

下面是實際的絕招:

A = bsxfun(@ge, M, [thr.b, thr.c, thr.h, thr.r, thr.s]); 
A = num2cell(A,1); 
[index.b, index.c, index.h, index.r, index.s] = deal(A{:}); 

同樣,你可以使用適當的數據結構,更有效的方式做到這一點。 希望這有助於。

+0

謝謝@upperBound,合適的數據結構是什麼?你的意思是Dan在上一個答案中的表現方式? – Massoud 2013-03-11 09:42:56

相關問題