MATLAB排除1标准偏差以外的数据

时间:2009-09-20 04:48:39

标签: arrays matlab vector slice

我对MATLAB缺乏经验,很抱歉新手问题:

我有一个大型向量(905350个元素),其中存储了大量数据。 我有标准差和平均值,现在我想删除高于/低于平均值一个标准偏差的所有数据点。 我不知道怎么回事。从我收集到的东西,我必须做出某种双循环?

就像:mean-std<我想要的数据< mean + std

4 个答案:

答案 0 :(得分:6)

如果数据位于变量A中,且平均值存储在meanA中且标准差存储在stdA中,则以下内容将提取您想要的数据,同时保留原始数据数据值的顺序:

B = A((A > meanA-stdA) & (A < meanA+stdA));

以下是一些有用的文档链接,涉及上面使用的概念:logical operatorsmatrix indexing

答案 1 :(得分:6)

您只需使用元素逻辑AND

m = mean(A);
sd = std(A);
B = A( A>m-sd & A<m+sd );

另外,知道:|x|<c iff -c<x<c,您可以将两者结合为一个:

B = A( abs(A-m)<sd );

答案 2 :(得分:0)

将A作为原始向量,将B作为最终向量:

B = sort(A)
B = B(find(B > mean-std,1,'first'):find(B < mean+std,1,'last'))

答案 3 :(得分:0)

y = x(x > mean-std);
y = y(y < mean+std);

应该有效。有关详细信息,请参阅FIND。 FIND命令正在上面的代码中隐式使用。