Что означает L == 2 в MATLAB? - PullRequest
       27

Что означает L == 2 в MATLAB?

1 голос
/ 16 апреля 2010
    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 ]

5 голосов
/ 16 апреля 2010

Может быть, поможет визуальный пример.

>> 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 затем возвращает линейный адрес ненулевых элементов.

4 голосов
/ 16 апреля 2010

Сравнивая матрицу со скаляром, вы получаете поэлементное сравнение. То есть каждый элемент матрицы сравнивается со скалярным. Результатом является матрица с 1 во всех позициях, для которых сравнение вернуло true, и 0 во всех остальных позициях.

find, с другой стороны, возвращает все индексы, для которых аргумент не равен нулю.

2 голосов
/ 16 апреля 2010

«Как можно сравнить матрицу со скалярной?»: Попробуйте doc eq в приглашении matlab и там будет написано:

A == B сравнивает каждый элемент ... для равенство ... Каждый вход Выражение может быть массивом или скаляром значение.

Если один вход скалярный, а другой a нескалярный массив, то скалярный вход обрабатывается как массив имеющие те же размеры, что и нескалярный входной массив. Другими словами, если вход A является числом 100, а B является матрица 3 на 5, тогда A рассматривается как если бы это была матрица 3 на 5 элементы, каждый набор по 100. MATLAB возвращает массив того же размеры как нескалярный вход массив.

1 голос
/ 16 апреля 2010

См. Функцию 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
1 голос
/ 16 апреля 2010

find(L==2) вернет все строки и столбцы элементов, которые равны 2.

Итак, если вы получите [r]=[1 2 3 5 6] и [c]=[1 2 3 5 6], это означает, что строки и столбцы элементов, равные 2, равны {1,1}, {2,2}, {3,3} и т. Д.

Официальное объяснение matlab здесь . Вы также можете погуглить термин " matlab find "

0 голосов
/ 16 апреля 2010

Другое объяснение:

Say,

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];

Вы можете расширить это для произвольной матрицы А.

То же самое для добавления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...