我需要从矩阵中排除一些错误数据。我知道什么数据是正确的,我试图插入值之间,所以我可以得到不错的图表,没有那么大的错误。我必须使用那种形式的矩阵,我必须保持其形状。我只能替换一些标记为错误的数据。到目前为止,我将告诉你我的工作:
M=[0.1000
0.6000
0.7000
0.8000
0.9000
0.9500
1.0000
1.0500
1.1000
1.1500
1.2000
1.2500
1.3000
1.5000
1.7500
2.0000
2.2500
2.5000
3.0000];
CZ1=[ 9.4290
9.5000
9.3250
9.2700
9.2950
9.4350
9.6840
10.0690
10.1840
10.2220
10.2160
9.6160
9.6890
9.4880
9.5000
9.5340
9.3370
9.0990
8.5950];
N1=11;
Nn=13;
Mx1=M(N1);
Mx2=M(Nn);
Mx=[Mx1 Mx2]';
CN1=CZ1(N1);
CN2=CZ1(Nn);
CNy=[C1 C2]';
y1=interp1q(Mx,CNy,M(N1:Nn));
CNf=CZ1;
NEWRangeC=y1;
Cfa=changem(CZ1,[NEWRangeC], [CNf(N1:Nn)]);
figure
plot(M,Cf,'-*b',M,Cfa,'r')
到目前为止,你可以看到我使用了第11点和第13点,并且我排除了第12点插入11点到13点的点。这是有效的,但我想进行修改。
我的问题是:如何选择错误值并将其删除,但在邻居之间插入空格。我想使用M矩阵值作为我的参考(不是我的例子)。
答案 0 :(得分:0)
好吧,您可以通过使用find
命令查找错误元素(这将返回索引)开始。这也适用于矩阵。
然后,您可以抓住每个索引周围的元素,并在其间插入,就像您一样。
答案 1 :(得分:0)
假设您知道哪些元素不正确,您可以使用Matlab的interp1
函数对它们进行插值(这仅在M
矩阵实际上是向量`时才有效:
error_indices = [11 13];
all_indices = 1:length(M)
% Get the indices where we have valid data
all_correct_indices = setdiff(all_indices, error_indices)
% the first two arguments are the available data.
% the third arguments is what indices you are looking for
M_new = interp1(all_correct_indices, M(all_correct_indices), all_indices)
以上内容在all_indices
处插值 - 包括缺失的元素。如果您已经拥有有效数据(all_correct_indices
),Matlab将返回该数据。在其他地方,它将使用两个最近的邻居进行插值。
请尝试help interp1
以获取有关此功能如何运作的更多信息。
x = 1:10; % all indices
y = x*10;
e = 3:7; % the unknown indices
s = setdiff(x, e); % the known indices
y_est = interp1(s, y(s), x)
ans =
10 20 30 40 50 60 70 80 90 100
我们看到interp1使用可用数据(特别是相邻点20和80)线性地插入了30到70的所有值。