为第一维的下标聚合3d数组的第三维

时间:2011-10-01 14:45:41

标签: matlab multidimensional-array

我有一个3维数组Val 4xmx2维度。 (m可以变化)

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

我想得到的输出是上面2D阵列中第2列的平均值(只有1,3和4),这样第1列的值是> = 2且< = 4。

输出将是: {282,318.5,98}

这可以通过使用几个循环来完成,但只是想知道是否有更有效的方法?

1 个答案:

答案 0 :(得分: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将一个函数应用于单元格数组的每个元素,索引确保只对好行进行平均。