2014-12-06 2 views
2

У меня есть две матрицы, заполненные 0 и 1Как пройти двух одинаковых матриц размера и сравнить их

e.g. 
A = [ 0 0 1 0, 
     1 0 1 0 ] 

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

и я хотел бы, чтобы сравнить значения образуют ту же позицию по отношению друг к другу и вернуть 2х2 Matrice

R = [ TP(1) FN(3) 
     FP(2) TN(2) ] 

TP = returns the amount of times A has the value 1, and B has the value 1 
FN = returns the amount of times A has the value 0, and B has the value 1 
FP = returns the amount of times A has the value 1, and B has the value 0 
TN = returns the amount of times A has the value 0, and B has the value 0 

Как я могу получить каждый индивидуальный номер в A и B?

ответ

2

Подход № 1: Сравнение на основе использования bsxfun -

pA = [1 0 1 0] %// pattern for A 
pB = [1 1 0 0] %// pattern for B 

%// Find matches for A against pattern-A and pattern-B for B using bsxfun(@eq. 
%// Then, perform AND for detecting combined matches 
matches = bsxfun(@eq,A(:),pA) & bsxfun(@eq,B(:),pB) 

%// Sum up the matches to give us the desired counts 
R = reshape(sum(matches),2,[]).' 

Выходной -

R = 
    1  3 
    2  2 

Подход № 2: Нахождение десятичных чисел -

Шаг-1: Найти десятичных чисел, соответствующих комбинированных A-х и B

>> dec_nums = histc(bin2dec(num2str([B(:) A(:)],'%1d')),0:3) 
dec_nums = 
    2 
    2 
    3 
    1 

Шаг 2: Re порядка десятичные числа, такие, что они выстраиваются по мере необходимости в задаче

>> R = reshape(flipud(dec_nums),2,[])' 
R = 
    1  3 
    2  2 
+1

Второй подход - очень оригинальный! –

+0

Это сработало очень хорошо, спасибо! Я только сейчас понял, что я имел в виду, что я работал с бинарным изображением (которое заполнено 0 и 1). Это немного отличается ... знаете ли вы, как сравнивать два бинарных изображения? –

+0

@GwenWong Сравните два бинарных изображения и найдите аналогичные шаблоны для A и B и получите выход «2x2»? – Divakar

2

Использование logical operators& и ~ применяется на linearized версиях A и B, а затем nnz (или sum) для подсчета true значения:

R = [nnz(A(:)&B(:)) nnz(~A(:)&B(:)); nnz(A(:)&~B(:)) nnz(~A(:)&~B(:))]; 
Смежные вопросы