我需要帮助获取以下数据,这些数据以大矩阵形式组织,并对具有匹配ID(索引)的所有值进行平均,并输出另一个矩阵,其中仅包含ID和跟踪它的平均值。
File with data format:
(This is the StarData variable)
ID>>>>Values
002141865 3.867144e-03 742.000000 0.001121 16.155089 6.297494 0.001677
002141865 5.429278e-03 1940.000000 0.000477 16.583748 11.945627 0.001622
002141865 4.360715e-03 1897.000000 0.000667 16.863406 13.438383 0.001460
002141865 3.972467e-03 2127.000000 0.000459 16.103060 21.966853 0.001196
002141865 8.542932e-03 2094.000000 0.000421 17.452007 18.067214 0.002490
不要被我发布的例子误导,第一个数字重复大约15行,然后ID改变,这是一整套不同的ID,然后它们再次作为整个组重复,想想第一个块代码= [1 2 3; 1 5 9; 2 5 7; 2 4 6]然后代码重复使用除索引之外的列的不同值。主要的区别是跟踪ID的值,我需要在matlab中对其进行平均,并输出一个干净的矩阵,每个ID中只有一个完全取平均值。 感谢您给予的任何帮助。
答案 0 :(得分:1)
this answer的修改完成了以下工作:
[value_sort ind_sort] = sort(StarData(:,1));
[~, ii, jj] = unique(value_sort);
n = diff([0; ii]);
averages = NaN(length(n),size(StarData,2)); % preallocate
averages(:,1) = StarData(ii,1);
for col = 2:size(StarData,2)
averages(:,col) = accumarray(jj,StarData(ind_sort,col))./n;
end
结果是变量averages
。它的第一列包含用作索引的值,每个后续列包含根据索引值的该列的平均值。
Matlab 2013a以后的兼容性问题:
函数unique
在Matlab 2013a中有changed。对于该版本,请将'legacy'
标记添加到unique
,即将第二行替换为
[~, ii, jj] = unique(value_sort,'legacy')