M
是一个由多个子矩阵Ai
组成的矩阵,Ai(1:3,j)
是j = 1,...,size(Ai,2)
的相同向量
M = [1022 3001 4451 1022 1022 3001 3001 1022 4451 1022;
112 45 10 112 112 45 45 112 10 11;
500 11 55 500 500 11 11 500 55 88;
2 6 6 5 71 2 71 88 2 2]
A1 = [1022 1022 1022 1022;
112 112 112 112;
500 500 500 500;
2 5 71 88]
A2 = [3001 3001 3001;
45 45 45;
11 11 11;
6 2 71]
A3 = [4451 4451;
10 10;
55 55;
6 2]
A4 = [1022;
11;
88;
2]
V = [2 71 6 9]
此问题的唯一初始数据是M
和V
。
我的目标,如果Ai
的{{1}}值不包含M
,则Ai(4,:)
的所有子矩阵numel(V)-2
将被删除{1}}。
我的示例V
,A1
和A2
验证了这一情况。
预期的输出(列的顺序并不重要):
A3
如何更改以下code以解决我的问题:
[1022 1022 1022 1022 3001 3001 3001 4451 4451 ;
112 112 112 112 45 45 45 10 10;
500 500 500 500 11 11 11 55 55;
2 5 71 88 6 2 71 6 2]
答案 0 :(得分:1)
看看这是否适合你 -
%// ID columns of M based on the uniquenes of the first thre rows
[~,~,idx] = unique(M(1:3,:).','rows') %//'
%// For each ID detect if it satisfies the ">= numel(V)-2" criteria
matches = accumarray(idx(:),M(4,:)',[],@(x) sum(ismember(V,x))>=numel(V)-2 )
%// Use the valid ID's to select the valid unique groups for desired output
out = M(:,ismember(idx,find(matches)))