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일

0 개 추천

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일

1 개 추천

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

+1 , far more elegant :)
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일

0 개 추천

[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

카테고리

도움말 센터File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

태그

질문:

2019년 9월 11일

댓글:

2019년 9월 11일

Community Treasure Hunt

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

Start Hunting!

Translated by