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?

 采纳的回答

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 个)

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 个评论

Ok, I wanted to confirm this first. I edited my question according to my real problem.

请先登录,再进行评论。

类别

帮助中心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!

Translated by