我有一个有2列的矩阵。我想删除基于数字的序列排在第2列 例如:Matlab:根据一列数列删除行
Data = [1 2
3 4
5 4
6 2
7 0
8 2]
然后删除行,如果在第2列序列是4 4 2 所以最终会与:
Data = [1 2
7 0
8 2]
我有一个有2列的矩阵。我想删除基于数字的序列排在第2列 例如:Matlab:根据一列数列删除行
Data = [1 2
3 4
5 4
6 2
7 0
8 2]
然后删除行,如果在第2列序列是4 4 2 所以最终会与:
Data = [1 2
7 0
8 2]
让我们添加一些数据资料,以显示这两个[4 4 2]
序列:
Data =
1 2
3 4
5 4
6 2
7 0
8 2
9 2
7 4
1 4
0 2
4 0
3 2
现在,这应该做的工作,并删除次Ë行包括在第二列中的序列[4 4 2]
:由@Adiel提供
Seq=[4 4 2]; % sequence to delete rows according to
Data(bsxfun(@plus,findstr(Data(:,2)',Seq)',(0:length(Seq)-1)),:)=[]
Data =
1 2
7 0
8 2
9 2
4 0
3 2
回答是马丽娟,但是如果包含在Data
号码的范围是超过能够由字符串可以使用被表示的值此方法:
Data = [1 2
3 4
5 4
6 2
7 0
8 2]
Seq = [4 4 2]
创建一个矩阵,示出了具有数据的元素SEQ平等:
r = size(Data, 1);
n = numel(Seq);
idx = bsxfun(@eq, Data(:,2), Seq);
idx =
0 0 1
1 1 0
1 1 0
0 0 1
0 0 0
0 0 1
然后,我们小号HOULD重塑idx
大小[r+1,n]
:
idx2 = false(r+1, n);
idx2(idx) = true;
idx2 =
0 1 0
1 1 1
1 0 0
0 0 1
0 0 0
0 1 0
0 0 0
现在如果[4 4 2]
序列包含在Data
的idx2
每一行的所有元素将是1,所以,我们应该找到这样的行。
f = find(all(idx2, 2));
f =
2
所以每个序列的开始索引中找到。要找到其他元素,我们将0:n-1
添加到f
。
idx3 = bsxfun(@plus, f, 0:n-1);
idx3 =
2 3 4
删除元素:
Data(idx3, :) = [];
Data =
1 2
7 0
8 2
谢谢!它工作完美。 – Diana