MATLAB每行排除一列的平均值

时间:2017-04-20 16:14:21

标签: matlab loops mean

我对Matlab相当新,搜索最后几个小时还没有解决我的问题。我的目标是根据20个独立实验的平均值计算扩散系数,然后通过这些扩散系数的均方根估计统计不确定度。 我有一个数据集:20列151行。每列代表一个实验。我想计算EACH ROW的平均值,但每次都要留下一个COLUMN(所以一次省略一个实验)。所以最后我希望有20列,每列有151个“均值”值。到目前为止我尝试了什么:

DataExclOne = RawData;  
DataExclOne(:,1) = []  

我可以为所有20列执行此操作,然后计算均值

mean (DataExclOne,2)

然而,这并没有多大帮助。我想我需要某种循环来获得一个很好的平滑代码,但我无法弄清楚(我在这个网站上看了一下:https://www.tutorialspoint.com/matlab/matlab_loops.htm

这是第一部分第二部分,我必须弄清楚这是什么时候;)随意阅读:
这些平均值必须乘以10 ^ -18来计算正确的单位 这些值的斜率与从入口16到136的设定时间(0-3000 ps)需要下降6.这20个值(扩散系数)然后我想通过计算均方根偏差来测试统计不确定性( alread在RMSD上发现了一些东西https://de.mathworks.com/matlabcentral/answers/4064-rmse-root-mean-square-error) 感谢您提供任何帮助或指导

2 个答案:

答案 0 :(得分:3)

你可以使用矩阵乘法:

% data matrix
A = rand(151,20);
% missing column indexes matrix
B = ones(20) - eye(20);
% mean of each row with one missing col at a time
V = (A*B)/19;
% do that again manually for columns 1 and 4
v1 = mean(A(:,2:end),2);
v4 = mean(A(:,[1:3 5:end]),2);
% check
diff1 = max(abs(V(:,1) - v1)) % 2.2204e-16
diff4 = max(abs(V(:,4) - v4)) % 1.1102e-16

答案 1 :(得分:0)

您可以circshift移动数组,每次都跳过第一列的平均值。查看此脚本的控制台输出以确定正在进行的操作。 。

x = 1:5;
x = [x;x;x];
y = zeros(size(x));

for nn = 1:size(x,2)
    x = circshift(x,1,2)
    y(:,nn) = mean(x(:,2:end),2)
end