2011-10-01 63 views
0

我有一個3維數組Val 4xmx2維。 (m可以是可變的)第一維下標的3d數組的集合第三維

Val{1} = [1, 280; 2, 281; 3, 282; 4, 283; 5, 285]; 
Val{2} = [2, 179; 3, 180; 4, 181; 5, 182]; 
Val{3} = [2, 315; 4, 322; 5, 325]; 
Val{4} = [1, 95; 3, 97; 4, 99; 5, 101]; 

我有一個下標向量:

subs = {1,3,4}; 

我想要得到作爲輸出是第2列中的平均上述二維陣列(僅1,3的4),使得第一列值大於等於2且< = 4。

輸出將是: {282,318.5,98}

這或許可以通過使用幾個循環,只是不知道是否有更有效的方法呢?

回答

0

這裏的一個單行:

output = cellfun(@(x)mean(x(:,1)>=2 & x(:,1)<=4,2),Val(cat(1,subs{:})),'UniformOutput',false); 

如果subs是數值陣列(未單元陣列)代替,即subs=[1,3,4],並且如果output不必是一個單元陣列,但也可以是的數值陣列來代替,即output = [282,318.5,98],則上述簡化爲

output = cellfun(@(x)mean(x(x(:,1)>=2 & x(:,1)<=4,2)),Val(subs)); 

cellfun適用於單元陣列的每個元件的功能,並且所述分度可確保只有好的行是平均。

+0

輝煌的東西。對我來說很完美。非常感謝。 – sdhrm

+0

@sdhrm:如果您發現我的答案有用,請考慮接受它。 – Jonas

+0

@喬納斯:當然,我會這麼做的。還有一件事我想問。如果Val {3}是一個空向量,則該代碼將引發錯誤:? ??試圖訪問x(:,1);索引超出範圍,因爲size(x)= [0,0]。你知道我們如何擺脫這個錯誤,打印NaN而不是拋出錯誤 – sdhrm