在matlab中我有一个128乘n矩阵,我们可以调用
[A B C]
其中每个字母是128 x 1矩阵。
所以我想做的是将上面的矩阵与另一个矩阵连接,
[A~D E]。
其中A~的值与A相似。 我想得到的结果是:
[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]'
在某些情况下,值完全不同,但大多数情况下值都很接近。我没有为此定义的阈值,但理想情况下,这将是我可以尝试的东西。
答案 0 :(得分:0)
如果您只想省略相同的列,这是一种方法:
%# 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')';
答案 1 :(得分:0)
要解决此问题,可以使用名为vl_ubcmatch的匹配算法。
[matches,scores] = vl_ubcmatch(da,db);对于da中的每个描述符, vl_ubcmatch在db中找到最接近的描述符(由L2测量) 他们之间差异的规范)。原始匹配的索引 并且最接近的描述符存储在每列匹配中 该对之间的距离存储在分数中。
源: http://www.vlfeat.org/overview/sift.html
因此,解决方案是找到具有最高分数的匹配列,并在连接之前消除它们。
答案 2 :(得分:0)
我认为你需要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
这确实是我们操纵的类似的条目。阅读help pdist2
或doc pdist2
了解更多背景信息。