how to run a certain code loop for 'N' times and get 'N' number of output outside the loop.

조회 수: 10 (최근 30일)
I have certain code which I run for 'N' times using 'for' loop but after running the loop when I want to get all the N value of the parameters, it only gives the Last (Nth) value. for example this code generates the five matrices if I put A inside.
clc clear all N = 5; for i = 1:N A = rand(3,5); A end
% output is
A =
0.4352 0.9375 0.5505 0.2475 0.3547
0.1577 0.1078 0.4274 0.4474 0.7731
0.6005 0.9000 0.1524 0.5328 0.8817
A =
0.7341 0.6411 0.3105 0.4269 0.9250
0.4064 0.1275 0.5786 0.0331 0.3583
0.6042 0.4962 0.9436 0.9294 0.2600
A =
0.7869 0.6848 0.9429 0.9094 0.6503
0.5116 0.0924 0.0966 0.0113 0.3851
0.5625 0.8726 0.8459 0.5237 0.6493
A =
0.7629 0.2782 0.6316 0.4008 0.0904
0.5757 0.8398 0.8335 0.5543 0.7444
0.6319 0.4268 0.2702 0.4439 0.0326
A =
0.4297 0.5223 0.8845 0.8946 0.5676
0.0373 0.9096 0.2550 0.3985 0.8945
0.9758 0.3832 0.9090 0.6250 0.2142
% If I put 'A' outside the loop it gives only the last (5th) value.
clc clear all N = 5; for i = 1:N A = rand(3,5); end A
A =
0.4297 0.5223 0.8845 0.8946 0.5676
0.0373 0.9096 0.2550 0.3985 0.8945
0.9758 0.3832 0.9090 0.6250 0.2142
I want all the five matrices outside the loop as A1, A2, A3,A4 and A5. Please help me.

답변 (3개)

KSSV
KSSV 2016년 10월 26일
Make A a 3D matrix.
N = 5;
A = zeros(3,5,N) ;
for i = 1:N
A(:,:,i) = rand(3,5);
end
You can access A using A(:,:,i) where i = 1,2,3,4,5.

Thorsten
Thorsten 2016년 10월 27일
You don't need the loop:
A = rand(3, 5, N);
  댓글 수: 3
Jan
Jan 2016년 11월 4일
편집: Jan 2016년 11월 4일
@MANISH KUMAR: Please use the "{} Code" button to post readable code. Do not hide an important detail of the question in the comment of an answer, but all required details shsould be found inside the original question. Therefore use the possibility to edit the question. Thanks.
You got several suggestion already. All you have to do is storing the matrix in each iteration.
Result = cell(1, N);
for i = 1:N
...
ResultC{i} = X;
end
...
% Perhaps:
ResultM = cat(3, ResultC{:});
MANISH KUMAR
MANISH KUMAR 2016년 11월 10일
@Jan Simon: Sir thanks for the kind support and sorry for the mistake. I will keep this in mind next time. Thank you very much again.

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


Stefano Gianoli
Stefano Gianoli 2016년 10월 26일
편집: Stefano Gianoli 2017년 7월 26일
You might allocate the memory required for A so it can hold 3 x 5 x N elements instead of just 3 x 5:
>>N = 5; for i = 1:N A(:,:,i) = rand(3,5); end, A
A(:,:,1) =
0.8147 0.9134 0.2785 0.9649 0.9572
0.9058 0.6324 0.5469 0.1576 0.4854
0.1270 0.0975 0.9575 0.9706 0.8003
A(:,:,2) =
0.1419 0.7922 0.0357 0.6787 0.3922
0.4218 0.9595 0.8491 0.7577 0.6555
0.9157 0.6557 0.9340 0.7431 0.1712
A(:,:,3) =
0.7060 0.0462 0.6948 0.0344 0.7655
0.0318 0.0971 0.3171 0.4387 0.7952
0.2769 0.8235 0.9502 0.3816 0.1869
A(:,:,4) =
0.4898 0.7094 0.6797 0.1190 0.3404
0.4456 0.7547 0.6551 0.4984 0.5853
0.6463 0.2760 0.1626 0.9597 0.2238
A(:,:,5) =
0.7513 0.6991 0.5472 0.2575 0.8143
0.2551 0.8909 0.1386 0.8407 0.2435
0.5060 0.9593 0.1493 0.2543 0.9293
you might also preallocate A for speed:
>> A = zeros(3,5,N);
  댓글 수: 2
KSSV
KSSV 2016년 10월 26일
N = 5; for i = 1:N, eval(sprintf('A%i = rand(3,5);A%i',i,i)), end
This is not suggested.
Stephen23
Stephen23 2016년 10월 26일
편집: Stephen23 2016년 10월 26일
@Stefano Gianoli: is there a reason why you are advising other beginners to use buggy and slow eval for such a trivial bit of code? eval is totally unnecessary in this code, and is best avoided (especially by beginners).

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

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by