how to change for loop

1 次查看(过去 30 天)
etudiant_is
etudiant_is 2016-5-16
回答: Jan 2016-5-16
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?

采纳的回答

Jan
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

更多回答(1 个)

Roger Stafford
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;
  1 个评论
etudiant_is
etudiant_is 2016-5-16
Ok, I wanted to confirm this first. I edited my question according to my real problem.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Loops and Conditional Statements 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by