我对Matlab相当陌生,最近几个小时的搜索还没有解决我的问题。我的目标是根据20个独立实验的平均值计算扩散系数,然后利用这些扩散系数的均方偏差估计统计不确定度。
我有一个数据集: 20列,151行。每一列代表一个实验。我想计算每一行的平均数,但每次留出一列(因此每次省略一个实验)。最后,我想要有20个列,每个列都有151个“平均值”值。到目前为止我尝试过的是:
DataExclOne = RawData;
DataExclOne(:,1) = [] 我可以对所有20列都这样做,然后计算出
mean (DataExclOne,2)然而,这并没有多大帮助。我想我需要一些循环来获得一个很好的流畅代码,但是我想不出(我看了一下这个网站:loops.htm)。
这是第一部分,第二部分,我必须弄清楚这是什么时候完成的;)请随意阅读:
这些平均值必须乘以10^-18才能计算出正确的单位。
这些值与设定时间(0~3000 ps)的斜率从条目16下降到136,需要下降6。这20个数值(扩散系数)我想通过计算均方根偏差来检验统计不确定度(alread在RMSD https://de.mathworks.com/matlabcentral/answers/4064-rmse-root-mean-square-error上找到了一些发现)。
谢谢您的帮助或指导
发布于 2017-04-20 16:25:10
您可以使用矩阵乘法:
% 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发布于 2017-04-20 16:27:16
您可以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)
endhttps://stackoverflow.com/questions/43524772
复制相似问题