You can use sub2ind :
Y(sub2ind(size(Y), 1:size(Y, 1), y')) = 1;
However, this may be a little slower:
Y = zeros(5000,10); y = randi(10, 5000, 1); tic for jj = 1:1000 for i = 1:size(Y,1) Y(i,y(i)) = 1; end end toc % Elapsed time is 0.126774 seconds. tic for jj = 1:1000 Y(sub2ind(size(Y), 1:size(Y, 1), y')) = 1; end toc % Elapsed time is 0.139531 seconds. % @Daniel solution tic for jj = 1:1000 Y = double(bsxfun(@eq, y, 1:10)); end toc %Elapsed time is 0.187331 seconds.
source share