storing data in a matrix from a nested loop

조회 수: 8 (최근 30일)
rajesh  regar
rajesh regar 2019년 9월 11일
댓글: rajesh regar 2019년 9월 11일
I want to save the vector made from d12 each time i.e. d12 is 4*3 matrix. d12 in nested loop
d1 = [0 0 2
0 0 -2 ];
d2 = [0 0 15
0 0 13 ];
for i = 1:2
for j = 1:2
d12() = [d1(i,:)-d2(j,:)];
end
end

채택된 답변

rajesh  regar
rajesh regar 2019년 9월 11일
d1 = [0 0 2
0 0 -2 ];
d2 = [0 0 15
0 0 13 ];
k = 1;
for i = 1:2
for j = 1:2
d12(k,:) = [d1(i,:)-d2(j,:)];
k = k+1;
end
end
you can initiate k as 1 then increase it by one
  댓글 수: 2
Stephen23
Stephen23 2019년 9월 11일
편집: Stephen23 2019년 9월 11일
rajesh  regar
rajesh regar 2019년 9월 11일
Thank you, it is really helped me

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Stephen23
Stephen23 2019년 9월 11일
편집: Stephen23 2019년 9월 11일
No loops required:
>> d1 = [0,0,2;0,0,-2]
d1 =
0 0 2
0 0 -2
>> d2 = [0,0,15;0,0,13]
d2 =
0 0 15
0 0 13
>> out = repelem(d1,size(d2,1),1) - repmat(d2,size(d1,1),1)
out =
0 0 -13
0 0 -11
0 0 -17
0 0 -15
This gives exactly the sme output as your nested loops:
>> isequal(out,d12)
ans =
1
  댓글 수: 2
madhan ravi
madhan ravi 2019년 9월 11일
+1 , far more elegant :)
rajesh  regar
rajesh regar 2019년 9월 11일
Thank you, I have to use loop for solving my problem because I need to define more variable and finally I will put in formula. Also the size of nested loop in my case is aroung 1000*1000 i.e. need to vary i = 1:1000 and j = 1:1000.

댓글을 달려면 로그인하십시오.


madhan ravi
madhan ravi 2019년 9월 11일
편집: madhan ravi 2019년 9월 11일
[m,n]=size(d1);
[m1,n1]=size(d2);
z = permute(reshape(d1.',1,n,m) - d2,[2,1,3])
d12 = reshape(z,n,[]).'
% Or if you prefer a loop
k = 1;
d12 = zeros(m+m1,n); % preallocate
for ii = 1:m % don't hardcode the sizes , use size() instead
for jj = 1:m1
d12(k,:) = d1(ii,:) - d2(jj,:);
k = k+1;
end
end

카테고리

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