Matlab 垂直合并矩阵时忽略类似列

Matlab 垂直合并矩阵时忽略类似列,matlab,matrix,distance,similarity,concat,Matlab,Matrix,Distance,Similarity,Concat,在matlab中,我有一个128乘n的矩阵,我们可以调用它 [甲、乙、丙] 其中每个字母是一个128×1的矩阵 所以我要做的是用另一个矩阵连接上面的矩阵 [A~D E] 其中A~的值与A相似。 作为concat的结果,我想要得到的是: [A B C D E] 其中A~被省略 最好的方法是什么?请注意,我事先不知道A~是类似的 澄清一下,我的问题是如何确定两列是否相似?类似的意思是,在两列之间,许多行值的值相近 也许一个例子也会有帮助 Vector A: [1 2 3 4 5 6 7 8

在matlab中,我有一个128乘n的矩阵,我们可以调用它

[甲、乙、丙]

其中每个字母是一个128×1的矩阵

所以我要做的是用另一个矩阵连接上面的矩阵

[A~D E]

其中A~的值与A相似。 作为concat的结果,我想要得到的是:

[A B C D E]

其中A~被省略

最好的方法是什么?请注意,我事先不知道A~是类似的

澄清一下,我的问题是如何确定两列是否相似?类似的意思是,在两列之间,许多行值的值相近

也许一个例子也会有帮助

Vector A: [1  2   3 4 5 6 7 8   9]'
           |  |   | | | | | |   | 
Vector B: [20 2.4 4 5 0 7 7 7.6 10]' 

在某些情况下,值完全不同,但大多数情况下,值接近。我没有为此定义阈值,但理想情况下,我可以尝试使用它。

如果只想省略相同的列,这是一种方法:

%# Define the example matrices.

Matrix1 = [ 1 2 3; 4 5 6; 7 8 9 ]';

Matrix2 = [ 4 5 6; 7 8 10 ]';

%# Concatenate the matrices and keep only unique columns.

OutputMatrix = unique([ Matrix1, Matrix2 ]', 'rows')';

为了解决这个问题,可以使用一种称为vl_ubcmatch的匹配算法

[比赛,得分]=vl_ubcmatch(da,db);对于da中的每个描述符, vl_ubcmatch以db为单位查找最近的描述符(由L2测量) 它们之间差异的标准)。原始匹配的索引 最接近的描述符存储在匹配项和 两人之间的距离存储在分数中

资料来源:


因此,解决方案是找到得分最高的匹配列,并在连接之前消除它们。

我认为您需要的是
pdist2
。 考虑下面的例子:

>> X = rand(25, 5); 
>> Y = rand(100, 5); 
>> Y(22, : ) = 0.99*X(22,:); 
>> D = pdist2(X,Y, 'euclidean'); 
>> [~,ind] = min(D(:)); 
>> [i,j]=ind2sub(size(D),ind)

    i = 
        22
    j = 
        22

这确实是我们操纵的相似条目。阅读
帮助pdist2
文档pdist2
,了解更多背景信息

您的问题是a)如何确定a~是否与a相似;b) 如何仅获取矩阵的两列;或者c)完全其他的东西?你说“相似”是什么意思?如果它与您的意思不一致,那么您应该定义一些方法来定义“相似到可以忽略”,这样您的问题就可以得到回答。@t我已经更新了问题,请看一看now@mugetsu比如说,如果你想找出
A
B
是否是相似的矩阵,为什么不这样做呢:
是否相似=全部(abs(A(:)-B(:)