gpt4 book ai didi

Matlab: "grouping mean"

转载 作者:行者123 更新时间:2023-12-02 04:38:18 25 4
gpt4 key购买 nike

假设我有向量:

 y = [1 1.01 1.02 1.03 2 2.01 2.02 3 3.01 3.02 3.03];
c = [0 0 0 0 1 1 1 2 2 2 2 ];

是否有一种矢量化方法来获取“分组平均值”,即 c 每个唯一值的 y 平均值? (这是一个简化的示例;我有类似的东西,但向量大小为数千个,并且 c 的值有数百个)

我可以在 for 循环中完成它,只是想知道它是否可以矢量化。这是我的 for 循环实现:

function [my,mc] = groupmean(y,c)
my = [];
mc = [];
for ci = unique(c)'
mc(end+1) = ci;
my(end+1) = mean(y(c==ci));
end

最佳答案

简短回答:

>> y = [1 1.01 1.02 1.03 2 2.01 2.02 3 3.01 3.02 3.03];
>> c = [0 0 0 0 1 1 1 2 2 2 2 ];
>> groupmeans = accumarray(c'+1,y',[],@mean)
groupmeans =
1.015
2.01
3.015

解释一下上面的内容:accumarray 有点神秘,但是非常有用并且值得了解(而且非常快)。第一个输入是一个向量(它们必须是列向量,这就是为什么它是 c'y'),用于对第二个输入向量的行进行分组。这些元素必须是正整数(出于某种原因),这就是我在 c' 中添加 1 的原因。最后一个输入是函数的句柄,该函数作为累加器应用于 y 中的每组值。

希望这是有道理的!如果没有,doc Accumarray :)

关于Matlab: "grouping mean",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10817155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com