目前我正在使用'accumarray'函数来查找与匹配ID相对应的一系列数字范围的平均值。例如,输入:
ID----Value
1 215
1 336
1 123
2 111
2 246
2 851
我的当前代码通过使用ID作为“分隔符”来查找上述值的无权平均值,以便我不会得到所有值的平均值作为一个数字,而是仅针对具有相应ID的值分别得到结果。
例如输出:
ID----Value
1 224.66
2 402.66
为了实现这个目标,我正在使用以下代码:
[ID, ~, Groups] = unique(StarData2(:,1),'stable');
app = accumarray(Groups, StarData2(:,2), [], @mean);
使用StarData2作为函数的输入。到目前为止,这对我的目的完美地工作,但我需要知道是否可以使accumarray给我加权平均值,以便在找到平均值之前可以为app中的每个点分配一个权重,或者@mean可以被替换为可以实现此功能的函数。新的输入将如下所示:
ID----Value----Weight
1 215 12
1 336 17
1 123 11
2 111 6
2 246 20
2 851 18
新代码必须执行sum(val(i)*weight(i))/sum(weight)而不是标准均值。感谢您的任何帮助。
data
不是WeightedMeanFcn
的输入。它必须在定义WeightedMeanFcn
之前定义!然后它将被匿名函数所捕获。 - chappjcWeightedMeanFcn = @(x) sum(StarData4(x,5).*StarData4(x,6))/sum(StarData4(x,6))
。我正在修改我的代码,使权重和值更加明确,而不是列。 - chappjc