Hi, all, again, I want to do the work quickly: I have a large matrix A, and I want to assign value in some entry in each row.
For example: A=zeros(4); a=[1,2; 2,3; 3,2; 4,1];
I want (1,2), (2,3),(3,2), (4,1) of matrix A be 1. How shall I make it work in no more than 3 commands?
What I am doing now is using loops:
for i=1:4 A(a(i,1),a(i,2)=1; end
However, as i is very large like 3^14, the program is very slow. So I wonder is there a way to speed the programming?
No products are associated with this question.
idx = sub2ind(size(A), [1 2 3 4], [2 3 2 1]); A(idx) = 1;
A=zeros(4); a=[1,2; 2,3; 3,2; 4,1]; idx= sub2ind(size(A),a(:,1),a(:,2)); A(idx)=1
I've always found for-loops to be significantly faster than sub2ind and ind2sub. Especially as the number of indices gets large.
It's been a few years since I was timing it for my own work though...
Play games and win prizes!Learn more