我对MATLAB缺乏经验,很抱歉新手问题:
我有一个大型向量(905350个元素),其中存储了大量数据。 我有标准差和平均值,现在我想删除高于/低于平均值一个标准偏差的所有数据点。 我不知道怎么回事。从我收集到的东西,我必须做出某种双循环?
就像:mean-std<我想要的数据< mean + std
答案 0 :(得分:6)
如果数据位于变量A
中,且平均值存储在meanA
中且标准差存储在stdA
中,则以下内容将提取您想要的数据,同时保留原始数据数据值的顺序:
B = A((A > meanA-stdA) & (A < meanA+stdA));
以下是一些有用的文档链接,涉及上面使用的概念:logical operators,matrix 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命令正在上面的代码中隐式使用。