首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一次不包括一列在内的每一行的MATLAB平均值

一次不包括一列在内的每一行的MATLAB平均值
EN

Stack Overflow用户
提问于 2017-04-20 16:14:21
回答 2查看 392关注 0票数 0

我对Matlab相当陌生,最近几个小时的搜索还没有解决我的问题。我的目标是根据20个独立实验的平均值计算扩散系数,然后利用这些扩散系数的均方偏差估计统计不确定度。

我有一个数据集: 20列,151行。每一列代表一个实验。我想计算每一行的平均数,但每次留出一列(因此每次省略一个实验)。最后,我想要有20个列,每个列都有151个“平均值”值。到目前为止我尝试过的是:

代码语言:javascript
复制
DataExclOne = RawData;  
DataExclOne(:,1) = []  

我可以对所有20列都这样做,然后计算出

代码语言:javascript
复制
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上找到了一些发现)。

谢谢您的帮助或指导

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-20 16:25:10

您可以使用矩阵乘法:

代码语言:javascript
复制
% 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
票数 3
EN

Stack Overflow用户

发布于 2017-04-20 16:27:16

您可以circshift移动数组,每次跳过第一列的平均值。看看这个脚本的控制台输出,找出正在发生的事情。。

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43524772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档