在矩阵

时间:2015-10-11 11:08:24

标签: matlab matrix

我想在大矩阵中找到不相交的行。举个例子:

A=[1 5 3; 3 4 5; 7 9 10;4 5 6;11 2 8; 3 5 10]

在此矩阵中,不相交的行为:[1 5 3], [11 2 8][7 9 10]。如何在Matlab中快速编程?

2 个答案:

答案 0 :(得分:2)

如果我bsxfun -

M = squeeze(any(bsxfun(@eq,A,permute(unique(A),[3 2 1])),2))
[~,row_idx] = max(M,[],1)
out = A(sum(M,2).' == histc(row_idx,1:size(A,1)),:)

逐步运行示例 -

A =
     1     5     3
     3     4     5
     7     9    10
     4     5     6
    11     2     8
     3     5    10
M =
     1     0     1     0     1     0     0     0     0     0     0
     0     0     1     1     1     0     0     0     0     0     0
     0     0     0     0     0     0     1     0     1     1     0
     0     0     0     1     1     1     0     0     0     0     0
     0     1     0     0     0     0     0     1     0     0     1
     0     0     1     0     1     0     0     0     0     1     0
row_idx =
     1     5     1     2     1     4     3     5     3     3     5
out =
     1     5     3
     7     9    10
    11     2     8

答案 1 :(得分:0)

您可以查找将它们添加到先前行的并集的行,增加并集中的元素数量(即该行中的所有元素都是新的):

B = []; 
C = zeros(1,size(A,1)); 
for k=1:size(A,1), 
    B1 = union(B, A(k,:)); 
    C(k) = numel(B1)-numel(B); 
    B=B1; 
end
result = A(C==size(A,2),:);