我正在努力将我的数据从Excel移动到Matlab。我有一些我希望根据多个标准进行平均的数据。我可以通过循环完成此操作,但是如果可能的话,只想使用矩阵运算。
到目前为止,我已经设法使用一个标准,使用accumarray如下:
data=[
1 3
1 3
1 3
2 3
2 6
2 9];
accumarray(data(:,1),data(:,2))./accumarray(data(:,1),1);
返回:
3
6
分别对应项目1
和2
的平均值。我至少有三个其他列需要包含在这个平均值中但不知道如何添加它。非常感谢任何帮助。
答案 0 :(得分:0)
对于您的单列,您无需再调用accumarray
两次,您可以提供mean
的函数句柄作为第四个输入
mu = accumarray(data(:,1), data(:,2), [], @mean);
对于多列,您可以使用行索引作为accumarray
的第二个输入,然后使用匿名函数中的那些来访问要操作的数据行。
data = [1 3 5
1 3 10
1 3 8
2 3 7
2 6 9
2 9 12];
tmp = accumarray(data(:,1), 1:size(data, 1), [], @(rows){mean(data(rows,2:end), 1)});
means = cat(1, tmp{:});
% 3.0000 7.6667
% 6.0000 9.3333