我想知道Matlab中矩阵中的丢弃元素。 我有一个矩阵'A',包含8个人的所有可能组合,每个人我有三个可能的选择,例如:
A=[1 1 1 1 1 1 1 1;
1 1 1 1 1 1 1 2;
1 1 1 1 1 1 1 3;
1 1 1 1 1 1 2 1;
1 1 1 1 1 1 2 2;
1 1 1 1 1 1 2 3;
1 1 1 1 1 1 3 1 ;
....
];
等所有元素。
现在我有一个新的向量B = [2 2],其中包含前两个人的值,我想从A获得一个新的矩阵,其中包含所有可能的组合,如上所述,丢弃所有不包含前两个人的B值。
我希望能够清楚。
提前致谢
答案 0 :(得分:1)
这应该有效:
sizeA = size(A,1); % check how long array A is
index = 1;
for ii=1:sizeA
if ~(A(index,1) == B(1,1)) || ~(A(index,2) == B(1,2)) % if either entry doesn't match
A(index,:) = []; % clear the line
else
index=index+1; % else: move to next line
end
end
请注意,它绝不是一个优雅的解决方案,因为它不易修改:评论中建议的ismember
函数Divakar更适合这个目的:
A(ismember(A(:,1:2),[2 2],'rows'),:)
这样做是因为如果前两个条目等于[2 2]
,它会逐行检查,并且只返回这些行。为澄清,这相当于:
indices = ismember(A(:,1:2),[2 2],'rows')
A(indices,:)
其中indices
是一个列向量,其前两个条目与[2 2]
匹配,每行包含1,否则为0。