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