How to vectorize this simple for-loop

2 views (last 30 days)
Hello,
I'm trying to vectorize something like this:
z=zeros(3); x=[1 2 3]; y=x;
for i=1:length(x) %or y, doesn't matter
z( x(i),y(i) )=z( x(i),y(i) ) + 1;
end
So
z= [1 0 0 ; 0 1 0 ; 0 0 1]
What I really want is to do it for any x and y vectors in a 1000by1000 zero matrix.
I tried to do:
z(x,y)=z(x,y)+1;
But I get all values of z =1. I also tried:
z(x.,y.)=z(x.,y.)+1;
But an error message appears.
Thanks for your help.

Accepted Answer

Matt J
Matt J on 19 Aug 2015
Edited: Matt J on 19 Aug 2015
idx=sub2ind(size(z),x,y);
z(idx)=z(idx)+1;
  2 Comments
Felix Lauwaert
Felix Lauwaert on 19 Aug 2015
Error using sub2ind (line 52) Out of range subscript.
Felix Lauwaert
Felix Lauwaert on 19 Aug 2015
idx=sub2ind([length(x),length(x)],x,y); z(idx)=z(idx)+1;
Is working. Thanks!

Sign in to comment.

More Answers (0)

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Products

Community Treasure Hunt

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

Start Hunting!