0
在my previous question的概括中,如何执行单元格元素的加权平均值(它们本身仍然是数组)并且应该保留它们本身?如何计算阵列单元阵列的加权平均值?
我想通过修改gnovice's answer这样开始:
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
具有正确的形状。这三种情况下,我认为需要采取护理是
- 重量= 1(或任何常数)=>返回通常的平均值
- numel(重量)==长度(C)=>重量的是每个细胞元c {N}(但等于用于固定n各自数组元素)
- numel(重量)== numel(cell2mat(C))=>每个阵列元件具有其自身的重量...
第一种情况很容易,第三种情况不太可能发生,所以此刻我对情况2感兴趣:如何将权重转换为数组,使得M.*weight
在上述总和中具有正确的尺寸?当然,也可以通过另一种方式获得加权平均值的答案。
编辑事实上,壳体3是更琐碎(什么同义反复,道歉)比壳体1如果重量具有相同的结构为c。
以下是对我的意思是壳体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)
你有没有想过按照上面列出的三个标准使用'varargin'和解析'weight'参数来使它成为一个函数? – Phonon 2011-03-08 15:01:43
对于情况(2),为了将'weight'向量和''c'单元转换为线性索引,查看'sub2ind'会很有趣。你将失去这个计算的结构,但你仍然在计算一个平均值。只是想着大声...... – Phonon 2011-03-08 15:06:32
@Phonon:re 1)是的,这是围绕它的框架,现在我只需要弄清楚如何重塑/ repmat/...?每个案件的重量正确。 2)我认为我没有明白你对sub2int的意见,而是为了澄清我想要的:'meanArray'的结构应该与'c {1}'的结构相同,即我不想要一个平均在所有元素上,但是对于每个阵列位置单独 – 2011-03-09 09:26:47