我想查找大矩陣中的非相交行。作爲一個例子:查找矩陣中的非相交行
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中編程?
我想查找大矩陣中的非相交行。作爲一個例子:查找矩陣中的非相交行
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中編程?
如果可以的話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
你可以看看,將它們添加到以前行的聯合行增加元素的數量按列數結合(即該行中的所有元素都是新的):
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),:);
好工作!謝謝 – asd2014
什麼是非交叉點g行? –
@AndrasDeak從我得到的結果來看,在最終輸出中不會考慮一行,如果之前有任何元素被用於任何行。 – Divakar
@Andras Deak:正如Divakar所討論的那樣。謝謝Divakar。 – asd2014