2017-04-20 24 views
0

我对Matlab相当陌生,搜索最近几个小时没有解决我的问题。我的目标是基于20个独立实验的平均值计算扩散系数,然后通过这些扩散系数的均方根偏差估计统计不确定性。我有一个数据集:20列151行。每列表示一个实验。我想计算EACH ROW的平均值,但每次都留下一个COLUMN(所以一次省略一个实验)。所以最后我想要有20个列,每列有151个“均值”。我试过至今:MATLAB每行排除一列的平均值

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

我能为所有20列做到这一点,然后计算手段

mean (DataExclOne,2) 

然而,这是不是真的有帮助。我想我需要某种循环来获得流畅的代码,但我无法弄清楚(我在本网站上看过:https://www.tutorialspoint.com/matlab/matlab_loops.htm

这就是第一部分第二部分我将不得不弄清楚这是什么时候完成的;)随意阅读:
这些平均值必须乘以10^-18来计算正确的单位。
这些值与设定时间(0-3000 ps)从第16条到第136条的斜率需要乘以6.这20个值(扩散系数)然后希望通过计算均方根偏差(在RMSD https://de.mathworks.com/matlabcentral/answers/4064-rmse-root-mean-square-error上发现了一些问题)。
感谢任何帮助或指导

回答

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 
+0

这是完美的,只是为了澄清:第1和第4列的部分只是为了表明计算方法中的偏差很小,对吗? –

+0

是的,它只是用于比较方法。 – user2999345

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 
+0

谢谢,这也是有帮助的。只是我明白了这一点:“mean(x(:,2:end),2)'计算平均值,留下第一列。然后'y(:,nn)'在位置nn上写下整个列的均值(:)?! –