首页 > 解决方案 > matlab中的“对称”行检测

问题描述

我有 A (nA x c) 偶数列(例如mod(c,2) = 0)和唯一行的整数矩阵。如何有效地(通过速度和内存优化功能symmetricRows)找到矩阵的“对称”行AiA1iA2其中“对称”行iA1iA2定义为:

all(A(iA1,1:end/2) == A(iA2,end/2+1:end) & A(iA1,end/2+1:end) == A(iA2,1:end/2),2) = true

例子 ():

A = [1 1 1 1; 
     2 2 2 2; 
     1 2 3 4;
     4 3 2 1; 
     2 2 3 3; 
     3 4 1 2;  
     3 3 2 2]
[iA1, iA2] = symmetricRows(A)
iA1 =
        1
        2
        3
        5       
iA2 =
        1
        2
        6
        7

矩阵的典型大小AnA ~ 1e4 to 1e6c ~ 60 to 120

该问题是由大型数据集的预处理引起的,其中“对称”行与用户定义的距离度量点无关。

示例2:准备更大的测试数据集可以使用此功能然后,例如:

N = 10;    
A = allcomb([1:N],[1:N],[1:N],[1:N]);
iA = symmetricRows(A)

标签: matlabvectorization

解决方案


如果您有统计工具箱:

d = ~pdist2(A(:,1:end/2), A(:,end/2+1:end));
[iA1, iA2] = find(triu(d & d.'));

推荐阅读