2017-08-21 3 views
2

J'ai une matrice (m * n). pour chaque deux lignes, comment je peux trouver le nombre d'éléments correspondants qui ne sont pas zéro. par exemple pour les lignes suivantes: r1 = [1,3,0,4], r2 = [5,0,0,4] , la réponse est 2. car les premier et quatrième éléments dans deux lignes ne sont pas nuls. grâceintersection correspondante de deux lignes sans zéro dans matlab

Répondre

3

Vous pouvez utiliser la multiplication matricielle:

L = logical(m);  % convert the matrix to a logical matrix 
result = L * L.'; % do matrix multiplication to compute number of corresponding elements 

Ainsi, l'élément de matrice result(i,j) représente le nombre d'éléments correspondants entre la ligne et de la ligne ij.

+0

Ceci est très utile pour moi. Merci. – Hamid

+0

@Hamid Glad si cela peut aider! Envisagez de marquer la réponse comme acceptée si c'est ce que vous voulez. – rahnema1

0

Je suppose que vous voulez considérer chaque bloc de deux rangées; qui est, première rangée de deuxième, troisième à quatrième etc.

refaçonner le m × n matrice d'entrée A dans un 2 × m/2 × n matrice 3D, puis utiliser all et sum le long des dimensions appropriées:

result = sum(all(reshape(A, 2, [], size(A,2)), 1), 3); 

à titre d'exemple, pour

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

le résultat est

>> result = sum(all(reshape(A, 2, [], size(A,2)), 1), 3) 
result = 
    0  3  5