3

我对MATLAB没有经验,很抱歉新手问题:

我有一个大向量(905350 个元素),其中存储了一大堆数据。我有标准偏差和平均值,现在我想删除高于/低于平均值一个标准偏差的所有数据点。我只是不知道怎么做。根据我收集到的信息,我必须制作某种双循环?

这就像:平均标准<我想要的数据<平均+标准

4

4 回答 4

6

如果数据在变量A中,平均值存储在meanA,标准差存储在 中stdA,那么以下将提取您想要的数据,同时保持数据值的原始顺序:

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

以下是一些涉及上述概念的有用文档链接:逻辑运算符矩阵索引

于 2009-09-20T05:42:54.460 回答
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 );
于 2009-09-20T05:44:54.113 回答
0

将 A 作为原始向量,将 B 作为最后一个向量:

B = sort(A)
B = B(find(B > mean-std,1,'first'):find(B < mean+std,1,'last'))
于 2009-09-20T05:10:23.403 回答
0
y = x(x > mean-std);
y = y(y < mean+std);

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

于 2009-09-20T05:23:15.947 回答