MATLAB Answers

0

Find if two sparse matrix have 1 in same position

Asked by Lorenzo Lasagni on 1 Nov 2017
Latest activity Commented on by Cedric Wannaz
on 1 Nov 2017
Hi everybody, I'm new here and new in use of matlab. I have two sparse matrix of different sizes and i want to know if both have 1 in position (x,y). There is a way to compare without make a comparison for each elements? (the matrix is a 10^7*10^7).

  0 Comments

Sign in to comment.

2 Answers

Answer by Cedric Wannaz
on 1 Nov 2017
Edited by Cedric Wannaz
on 1 Nov 2017
 Accepted Answer

Do you need something along this line?
% - Build small test case.
A = sprand( 4, 5, 0.5 ) > 0 ; % 4x5 sparse.
B = sprand( 4, 4, 0.5 ) > 0 ; % 4x4 sparse.
% - Find intersect of matching locations of non-zero elements.
[A_r, A_c] = find( A ) ;
[B_r, B_c] = find( B ) ;
matching_rc = intersect( [A_r,A_c], [B_r,B_c], 'rows' )
Which outputs e.g.:
>> A
A =
4×5 sparse logical array
(4,1) 1
(1,2) 1
(1,3) 1
(2,3) 1
(4,4) 1
(1,5) 1
(2,5) 1
>> B
B =
4×4 sparse logical array
(2,1) 1
(4,1) 1
(2,2) 1
(4,2) 1
(1,4) 1
(2,4) 1
(4,4) 1
>> matching_rc
matching_rc =
4 1
4 4

  2 Comments

thank you so much! It's exactly what i would to do!

Sign in to comment.


Answer by Cam Salzberger on 1 Nov 2017

Hello Lorenzo,
Sparse matrices in MATLAB are nice because you can often treat them as regular matrices. Specifically, indexing still works just fine:
rng default % For repeatability
A = sparse(randi(2,10)-1);
B = sparse(randi(2,10)-1);
A(3, 8) == 1 && B(3, 8) == 1
A(3, 9) == 1 && B(3, 7) == 1
Hope this helps!
-Cam

  1 Comment

The answer below is what i was looking for, thank you anyway!

Sign in to comment.