how to change for loop
1 次查看(过去 30 天)
显示 更早的评论
I have
A=[1 ;2; 2; 3; 1]
and
B=[4; 1; 5; 2 ;3]
then I want to have
C=zeros(size(B),1);
for i =1:size(B,1)
C(A(i))=B(i);
end
A, B and C are the same size and A contains the indices but not in order. Without a loop, we can do C(A)=B.
Now if I want to have (C is initialized properly at start )
C=zeros(3,5)
for i =1:size(B,1)
C(A(i),B(i))=5; %or any other value
end
C(A,B)=5 does not give the expected result. Is the principle not the same?
0 个评论
采纳的回答
Jan
2016-5-16
In C(A,B) the indices defined a block, not the linear index. See:
A = zeros(4, 4);
A(2:3, 2:3) = 1;
This does not insert the ones on the center diagonal elements only, but the indices define all 4 elements in teh center.
To get the same result as for the loop, use:
index = sub2ind(size(C), A, B)
C(index) = 1
0 个评论
更多回答(1 个)
Roger Stafford
2016-5-16
The assignment C(A) = B will work but first you must set up C as a five-element column vector. It does matter what it initially contains:
C = B; % It could also be C = zeros(5,1);
C(A) = B;
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!