我试图在矩阵列中取选择值的平均值,在不同列中按值选择它们。
例如:
X=[1950 1;
1950 2;
1950 3;
1951 1;
1951 5;
1952 1]
我想取每年值的平均值 - 实际上,选择具有相同列1值的值,然后取相应列2值的平均值。因此1950
的平均值为2
,1951
的平均值为1
。我可以通过为每年值创建一个向量然后取整个向量的平均值来手动完成此操作,但这对于更大量的数据来说是不切实际的。每年的数据点数量各不相同,所以我认为我不能使用重塑来实现这一点。
答案 0 :(得分:6)
您想要accumarray
:
[~, ~, ii ] = unique(X(:,1));
result = accumarray(ii, X(:,2), [], @mean);
我建议你仔细阅读documentation of accumarray
以了解其工作原理。这是一个非常强大和灵活的功能。
答案 1 :(得分:1)
尝试一下:
X=[1950 1; 1950 2; 1950 3; 1951 1; 1951 5; 1952 1];
years = unique(X(:,1));
for ii=1:length(years)
yr_index = find(X == years(ii));
yr_avg(ii) = mean(X(yr_index,2));
end
这将找到所有独特的年份条目。然后它将逐步浏览每年,找到与特定年份相对应的行,并取出那些行的第二列的平均值。它将保存yr_avg向量中的均值。年份矢量中的每年条目应在yr_avg向量中具有相应的均值。