在MATLAB中L == 2的含义是什么?

时间:2010-04-16 09:39:20

标签: matlab syntax

    BW = logical([1 1 1 0 0 0 0 0
                  1 1 1 0 1 1 0 0
                  1 1 1 0 1 1 0 0
                  1 1 1 0 0 0 1 0
                  1 1 1 0 0 0 1 0
                  1 1 1 0 0 0 1 0
                  1 1 1 0 0 1 1 0
                  1 1 1 0 0 0 0 0]);
    L = bwlabel(BW,4);
    [r,c] = find(L == 2);

如何将矩阵与标量进行比较?

6 个答案:

答案 0 :(得分:5)

也许一个直观的例子可能有所帮助。

>> b=[1 2 3;2 3 1;3 1 2]

b =

     1     2     3
     2     3     1
     3     1     2



>> b==2

ans =

     0     1     0
     1     0     0
     0     0     1



>> b==3

ans =

     0     0     1
     0     1     0
     1     0     0

返回与被比较矩阵大小相同的逻辑类矩阵。

>> find(ans)

ans =

     2
     4
     9

find然后返回非零元素的线性地址。

答案 1 :(得分:4)

将矩阵与标量进行比较会导致逐元素比较。即将矩阵的每个元素与标量进行比较。结果是一个矩阵,在所有位置都有1,比较返回true,所有其他位置都为0。

另一方面,

find返回参数为非零的所有索引。

答案 2 :(得分:2)

“如何将矩阵与标量进行比较?”:在matlab提示下尝试doc eq并说:

  

A == B比较每个元素... for   平等...每个输入   表达式可以是数组或标量   值。

     

如果一个输入是标量而另一个是a   非标量数组,然后是标量输入   被视为数组   尺寸与。相同   非标量输入数组。换一种说法,   如果输入A是数字100,而B是   一个3乘5的矩阵,然后A被视为   如果它是一个3乘5的矩阵   元素,每个设置为100. MATLAB   返回一个相同的数组   尺寸作为非标量输入   阵列。

答案 3 :(得分:1)

find(L==2)将返回等于2的所有元素行和列。

因此,如果您获得[r]=[1 2 3 5 6][c]=[1 2 3 5 6],则表示等于2的元素的行和列为{1,1}{2,2},{{ 1}}等等。

官方matlab解释is here。您还可以使用术语“matlab find

答案 4 :(得分:1)

请参阅bwlabel功能,它对您有用。

示例:

使用4个连接的对象标记组件。注意对象2和3;使用8连接标签时,bwlabel会认为这些是单个对象而不是两个单独的对象。

BW = logical ([1     1     1     0     0     0     0     0  
               1     1     1     0     1     1     0     0
               1     1     1     0     1     1     0     0
               1     1     1     0     0     0     1     0
               1     1     1     0     0     0     1     0
               1     1     1     0     0     0     1     0
               1     1     1     0     0     1     1     0
               1     1     1     0     0     0     0     0]);

L = bwlabel(BW,4)

L =

     1     1     1     0     0     0     0     0
     1     1     1     0     2     2     0     0
     1     1     1     0     2     2     0     0
     1     1     1     0     0     0     3     0
     1     1     1     0     0     0     3     0
     1     1     1     0     0     0     3     0
     1     1     1     0     0     3     3     0
     1     1     1     0     0     0     0     0

[r, c] = find(L==2);
rc = [r c]

rc =

     2     5
     3     5
     2     6
     3     6

答案 5 :(得分:0)

另一种解释:

说,

A = [1 2 3 
     4 5 6
     7 8 9]

然后当你说:

A == 5;

MATLAB看到了什么(实际的实现与此不同,但逻辑保持不变):

A == B*5;

其中,

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

您可以为任意A矩阵扩展它。

添加相同。