在MATLAB中比较两个矩阵,显示它们的匹配程度

时间:2015-07-19 17:30:18

标签: performance matlab matrix comparison

请假设A4 x 4的矩阵,其中包含:

A =  1     0     1     0
     1     0     1     0
     1     1     1     0
     1     1     0     0 

B是一个参考矩阵(4 x 4),它是:

B =  1     0     1     0
     1     0     1     0
     1     0     1     0
     1     1     1     0 

现在,如果将A与作为参考矩阵的B进行比较,则通过匹配这两个矩阵,除A(4,3)A(3,2)外,几乎所有成员都相等。但是,由于B是参考矩阵,A正在与之比较,因此这些成员的差异只是1B的问题。在这个特定的例子中,A(4,3)只是问题,而不是A(3,2),意思是:

>> C = B ~= A; ans = 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0

A(4,3) ~= B(4,3)

最后,我们正在寻找一段代码,可以显示A中有多少百分比等于B的等效成员。在这种情况下,差异是:

(8 / 9) * 100 = 88.89 %匹配。

请记住速度在这里也很重要。因此,更快速的解决方案更受欢迎。谢谢。

4 个答案:

答案 0 :(得分:2)

如果我做对了,你想知道的是 from ._ufuncs import * ImportError: DLL load failed: The specified module could not be found. <?php /** * Created by PhpStorm. * User: jokuf * Date: 7/19/15 * Time: 8:34 PM */ $melee = array( "ct-knife" => "link", "t-knife" => "link", "zeus" => "link" ); function selectWeapon($melee){ $i = 0; echo '<select>'; while ($i < count($melee)) { foreach ($melee AS $key => $value) { echo '<option>' . $key . '</option>'; $i++; } } echo '</select>'; } selectWeapon($melee); 。 试试这个:

B == 1

要获得百分比,您可以尝试:

A == 0

答案 1 :(得分:2)

要仅获取1B的不同条目,只需向其中添加&,这样您就只能获得这些条目。要获得百分比,请sum AB1。然后将其除以1B的总和(或1A的总和 - &gt; ,请参阅下面的注释)。

A = [1 0 1 0;
     1 0 1 0;
     1 1 1 0;
     1 1 0 0];

B = [1 0 1 0;
     1 0 1 0;
     1 0 1 0;
     1 1 1 0];

C = (B ~= A) & B

p = sum(B(:) & A(:)) / sum(B(:)) * 100

结果如下:

C =
     0     0     0     0
     0     0     0     0
     0     0     0     0
     0     0     1     0
p =
   88.8889

编辑/注意:在OP的问题中,如果他想要与AB中的百分比相关的百分比,则不是100%清楚。我假设它是参考矩阵的百分比,即B。因此,我除以sum(B(:))。如果您需要参考A中的那些,只需将最后一行更改为:

p = sum(B(:) & A(:)) / sum(A(:)) * 100

答案 2 :(得分:2)

你可以使用矩阵乘法,它必须非常有效,如下所列。

获取与A -

相关的百分比值
percentage_wrtA = A(:).'*B(:)/sum(A(:)) * 100;

获取与B -

相关的百分比值
percentage_wrtB = A(:).'*B(:)/sum(B(:)) * 100;

运行时测试

这里有一些快速运行时测试,用于将矩阵乘法与元素求和与(:)ANDing进行比较 -

>> M = 6000;  %// Datasize
>> A = randi([0,1],M,M);
>> B = randi([0,1],M,M);
>> tic,sum(B(:) & A(:));toc
Elapsed time is 0.500149 seconds.
>> tic,A(:).'*B(:);toc
Elapsed time is 0.126881 seconds.

答案 3 :(得分:1)

尝试:

sum(sum(A & B))./sum(sum(A))

输出:

ans =

    0.8889