丢弃矩阵matlab中的元素

时间:2015-02-27 13:46:07

标签: matlab matrix combinations

我想知道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值。

我希望能够清楚。

提前致谢

1 个答案:

答案 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。