在我之前的问题的概括中,如何对单元元素(它们本身是并且应该保持数组本身)执行加权平均?
我将首先像这样修改gnovice 的答案:
dim = ndims(c{1}); %# Get the number of dimensions for your arrays
M = cat(dim+1,c{:}); %# Convert to a (dim+1)-dimensional matrix
meanArray = sum(M.*weigth,dim+1)./sum(weigth,dim+1); %# Get the weighted mean across arrays
在此之前确保weight
具有正确的形状。我认为需要处理的三种情况是
- weight = 1(或任何常数)=> 返回通常的平均值
- numel(weight) == length(c) => weight 是每个单元元素 c{n} (但对于固定 n 的每个数组元素相等)
- numel(weight) == numel(cell2mat(c)) => 每个数组元素都有自己的权重...
案例 1 很简单,案例 3 不太可能发生,所以目前我对案例 2 感兴趣:如何将权重转换为一个数组,使得M.*weight
上述总和具有正确的维度?当然,也可以理解显示获得加权平均值的另一种方法的答案。
编辑事实上,如果权重与 c 具有相同的结构,则案例 3 甚至比案例 1更微不足道(多么重言式,道歉) 。
这是我对案例 2 的意思的示例:
c = { [1 2 3; 1 2 3], [4 8 3; 4 2 6] };
weight = [ 2, 1 ];
应该返回
meanArray = [ 2 4 3; 2 2 4 ]
(例如对于第一个元素 (2*1 + 1*4)/(2+1) = 2)