How can turn two indexing vectors into a corresponding matrix that counts how many locations that point has been hit?

2 views (last 30 days)
Steve Le
Steve Le on 4 Mar 2020
Commented: Steve Le on 4 Mar 2020
Basically if I have two corriponding vectors, x and y say,
x = [1;1;2;1];
y = [1;1;1;2];
I want to return a matrix that represents how many times that point was referenced in the indexing matrix. For our example it would be,
2 1
1 0
Because there are 2 (1, 1) in the indexing vectors so a 2 is displayed in the matrix and because (2,2) was never in the vectors, it displays a zero
I've tried
matrix = zeros(2, 2);
matrix(x, y) = matrix(x, y) + 1
but it returns
1 1
1 1
How can I turn two vectors like these into a matrix that shows me how many times the combomation of x and y shows up in the vectors.

Accepted Answer

BobH
BobH on 4 Mar 2020
The diagonal of a matrix is those elements whose subscripts are (1,1), (2,2), etc
s = sparse(x, y, 1)
s =
(1,1) 2
(2,1) 1
(1,2) 1
full(s)
ans =
2 1
1 0
d = full(diag(s))
d =
2
0

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!