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

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

就像是:平均值-标准差 < 我想要的数据 < 平均值 + 标准差

有帮助吗?

解决方案

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

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

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

其他提示

可以简单地使用的逐元素逻辑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 );

以A为原来的矢量,和B作为最终之一:

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

应该工作。请参见 FIND 了解更多详情。查找命令被隐式地使用在上面的代码。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top