[Matlab学习笔记]Matlab中删除矩阵指定行(指定列)

在用matlab编程进行GNSS粗差提取时,想实现对某矩阵删除指定行(指定列)的命令,下文中描述的均为行。通过百度,先明白对于一行数据而言,删除指定位置的元素的原理。主要思路是先提取要删除的位置,再对该位置数据进行删除。先通过以下范例说明上述思路:

  1. 单行数据:删除指定位置的元素
data='1999-08-25T12:00:00';
OtherCharIndex=find( (data<'0'|data>'9') & data~='-');
OtherCharIndex=[OtherCharIndex 12 13 15 16 18 19]
data_del_Other_char=data;
data_del_Other_char(OtherCharIndex)=[] %删除

上述代码中也是为了解决实际案例中的问题来解决的。
从garner的服务器上下载的结算后的原始xyz时间序列文件中,时间格式为“1999-08-25T12:00:00”,此时我想将其全部改成“1999 08 25”的格式,此处使用上述代码结合循环可以完成对全部时间的修改。

  1. 多行(矩阵形式):删除指定行数据
    此时通过对时间序列粗差提取的程序,计算出某时间序列所有粗差的角标。待删除矩阵列数固定,为12列,行数不固定,平均在1600+。先通过一个小例子来描述一下删除的思路:
clear
a=[1 2 3;4 5 6;7 8 9;10 11 12;13 14 15;16 17 18];%原矩阵
b=[2 4 6]%要删除的行的标号
a1=a;
[row,col]=size(a);
    
for i=1:length(b)
    a1(b(i),:)=zeros(size(1,col));            
end
a1(a1==0)=NaN;
a1(isnan(a1))=[];%此处删除完所有NaN后变成一列
a1=reshape(a1,length(a1)/col,col);%再按照固定的列数将其重新排列就可以得到新矩阵

此处,若还像上一个方法那样删除,再删除第一行元素时,原矩阵大小会发生改变。删除一行之后原矩阵从6x3变成了5x3,此时到最后一个删除第6行时原矩阵已经没有这么多行。所以先采用对指定行进行赋0操作,在完成对所有指定行的标记后再删除。但是后来经过考虑好像不太适合原矩阵就含有0元素的情况,但是是适用于我的情况的…再看看是否有更好的方法吧,有在更新
[更新2021.04.06]
经过修改下述方法比较实用:

clear
a=[1 2 3;4 5 6;7 8 9;10 11 12;13 14 15;16 17 18];%原矩阵
b=[2 4 6]%要删除的行的标号
a1=a;
[row,col]=size(a);
    
for i=1:length(b)
    a1(b(i),:)=ones(1,col)*NaN;;            
end
%a1(a1==0)=NaN;
a1(isnan(a1))=[];%此处删除完所有NaN后变成一列
a1=reshape(a1,length(a1)/col,col);%再按照固定的列数将其重新排列就可以得到新矩阵

你可能感兴趣的:(MATLAB,matlab)