我处理沉积物颗粒的大小分布。
row : 1~50
column : 1~10
commonly, row 1 :
[0 0 0 0 0 0 0 0 0 0 0 0.002 0.014 0.010 0.015 0
0.020 0.073 0 0 0 0 0 0 0 0 0 0 9.104 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
几乎所有行都有这种趋势.. 在这里,我必须删除异常值。
删除方法(Richard Styles,2013)。
通过首先计算由Y_i+1 - Y_i
定义的差异来识别异常值,其中Y_i
是'它的数据点,然后删除大于R
乘以平均值绝对值的所有值对于给定的配置文件,这种差异。
R
可调整..
接下来。我不知道。如何使用之前的RM_point
值替换Row
Row
。
Dif = abs(diff(st2.ex_dep_1m(1,26:75), 1, 2));
M_Dif = mean(Dif, 2);
RM_point = find(Dif(1,:) >= M_Dif*3);
st2.ex_dep_1m(1, RM_point(1,2))
0 0 0 0 0 0 0 0 0 0 0 0.002 0.014 0.010 0.015 0
0.020 0.073 0 0 0 0 0 0 0 0 0 0 9.104 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
在此矩阵中,9.104
是异常值。因此,我想将9.10
4替换为0
,但是,还有其他情况我们必须考虑这种情况。
RM_point
diff
功能时,Row
中的值相等
因为来自Row [0 9 0]
的{{1}}会导致diff [-9 9]
,但实际上,abs [9 9]
只有一个9 答案 0 :(得分:0)
使代码更通用,并能够捕获案例
- ex1)如果有多个RM_point实例
- ex2)实现diff函数时,Row中的值相等。 因为从Row [0 9 0]跟随diff [-9 9]导致abs [9 9],但实际上,Row只有一个9
您应该在原始数据集中搜索值>= M_Dif*3
(RM_point
点),而不是Dif
数组中的值。
在下面您可以找到更新的代码;为了更容易理解结果,我修改了输入数据如下:
0
以使数组“更短”3.12 9.104
)9.104
值,以便回答ex1
和ex2
您提问的案例此外,在代码中,我设置了用于将RM_point
再次替换为阈值(M_Dif*3
)的值,只是为了使relsult更容易理解。
% Modified input row:
% some "0" removed
% replaced 4 "0" with 3.21 9.104 9.104 9.104
%
st2.ex_dep_1m=[ 0 0 0.002 0.014 0.010 0.015 0, ...
0.020 0.073 0 0 3.21 0 0 9.104 9.104 9.104 0 0 0 0, ...
0 0 0 0 0]
% Create a copy of the original row to make easier verify the result
st2.ex_dep_1m_CLEAN=st2.ex_dep_1m
Dif = abs(diff(st2.ex_dep_1m, 1, 2));
M_Dif = mean(Dif, 2);
% Identify the points to be removed within the original row
% RM_point = find(Dif(1,:) >= M_Dif*3);
RM_point = find(st2.ex_dep_1m >= M_Dif*3);
% Set the points to be removed to the threshold (to better visualize them)
% st2.ex_dep_1m(1, RM_point(1,2))
st2.ex_dep_1m_CLEAN(1, RM_point)=M_Dif*3
% Plot the Original and the Modified row
a1=subplot(2,1,1)
plot(st2.ex_dep_1m,'o','markerfacecolor','k')
legend('Original')
grid on
a2=subplot(2,1,2)
plot(st2.ex_dep_1m_CLEAN,'o','markerfacecolor','r')
grid on
legend('Cleaned')
% Adjust the ylim
a1y=get(a1,'ylim')
a2y=get(a1,'ylim')
y_lim=[min([a1y a2y]) max([a1y a2y])]
set([a1 a2],'ylim',y_lim)
希望这有帮助。