计算x轴平均值

时间:2015-07-18 19:52:00

标签: matlab

我有一个简单的问题。

我有这段代码:

unset SESSION_MANAGER 

条形图代表按姓氏划分的子编号。例如,30个家庭有0个孩子,10个家庭有5个孩子。

我想通过家人获得孩子的平均水平,当然我不能只使用平均值(测试)。

1 个答案:

答案 0 :(得分:2)

我们可以轻松地以一种形式转换您的数据,其中向量的每个条目代表一个具有子项数值的族的观察。这样我们就可以生成一个长度为系列总数的向量。每个条目都是一个代表被观察家庭子女数量的数字。

为此,我们可以使用arrayfunrepmat重复cnt中的条目,与test中的相应系列一样多次。由于arrayfun的输出是一个单元格数组,因此我们需要使用cell2mat将其转换回正常的'矩阵。之后,obs是上面提到的矢量。现在,我们只需使用meanvar来计算您的需求。

以下是一个例子:

test = [30,40,60,30,20,10, 5 ,5, 3] % families
cnt  = [ 0, 1, 2, 3, 4, 5, 6, 7, 8] % children per family in test

obs = arrayfun(@(s,c)repmat(c,1,s),test,cnt,'UniformOutput',false);
obs = cell2mat(obs);

mean(obs)                           % mean
var(obs)                            % variance

结果如下:

ans =
    2.3103
ans =
    3.2349

注意:我假设有30个家庭有0个孩子(正如你的文字所说)而不是30个家庭有一个孩子(正如你的条形图所说)。只需调整cnt即可满足您的需求。

要从test获取cntobs,您可以像这样使用hist

[test,cnt] = hist(obs,unique(obs));

要创建条形图,请使用带有两个参数的bar。这样您就拥有了正确的x值(在本例中为cnt)。

bar(cnt,test)

xlabel('Children per family')
ylabel('Number of Families')

example_barplot