Effacer les filtres
Effacer les filtres

For Loop and final output matrix

1 vue (au cours des 30 derniers jours)
Amine Ben Ayara
Amine Ben Ayara le 4 Oct 2016
Hello Matlab Wizards, I hope everyone is doing wonderful. I have written a code that has an outside loop that consists of basically increasing the values of all variables in one of the input matrices within the second column incrementally from 0:750. The end product is a matrix that is computed based on some other matrices. What I would like help with is; I need to get some intermediate matrices out everytime an iteration takes place( i.e., if the loop goes 10 times, I need to save a particular intermediate matrix ten times) because I have to verify something. This is an example of my code:
function [CrUnit,AgrCarbonSimuN1,CR9,AgrCarbonSimuN2,AgrCarbonSimuN3,MN, MSA1,...
MSA2, MSA3] = CarbonProject(X, Lam,Y,UnitArea,ALLC3P,n,m)
%Carbon Storage convereted by Spatial Unit by period ( Period 1 through 3)
Xv=X
for k=0:750;
X(:,2)=X(:,2)+k;
[Mtest,MN, MN1, MN2, MN3, Mtest1, Mtest2] = Predict_all( X,Lam,Y)
[MS1, MS2,MS3,MSA1,MSA2, MSA3, MSA ] = MatrixCountnew(Mtest1,Mtest2,...
MN1, MN2, MN3,Y,UnitArea,n)
[CS,CS3030,CSLS,SUMCSLS,CrUnit] = CarbonPixels( ALLC3P,MSA,UnitArea,m );
for j=1:44040 ;
CR9(j,1)=CrUnit(:,:,j);
end
Period1Carbon= CR9(1:14680);
Period2Carbon= CR9(14681:29360);
Period3Carbon= CR9(29361:44040);
for cr7=1:14680;
[AgrCarbon1(cr7,:)]=[Period1Carbon(cr7,:)];
[AgrCarbon2(cr7,:)]=[Period2Carbon(cr7,:)];
[AgrCarbon3(cr7,:)]=[Period3Carbon(cr7,:)];
end
AgrCarbonSimuN1(1:14680,k+1)=AgrCarbon1;
AgrCarbonSimuN2(1:14680,k+1)=AgrCarbon2;
AgrCarbonSimuN3(1:14680,k+1)=AgrCarbon3;
X=Xv;
end
So basically, by the end of each iteation(i=0:750) I would like to have these matrices: MN1, and MSA1 not just when all the loop is done 750 times. I hope I made some sense.
  4 commentaires
dpb
dpb le 4 Oct 2016
What's the dimension of the two arrays of interest now?
Andrei Bobrov
Andrei Bobrov le 5 Oct 2016
CrUnit - array with size: (1 x 1 x 44040)?

Connectez-vous pour commenter.

Réponses (2)

Benjaminas Marcinkevicius
Example how i usually do it, a big ugly, but works if understood your problem correctly. you end up with cell array filled with your desired matrix.
%code
a = cell(20,1); % create cell array
for j=1:20
if (mod(j,10) == 0) % condition how often do you want to dump your matrix
a{j,1}= [1 1 1 1 1];
end
end
a = a(~cellfun('isempty',a)) % clear empty cell arrays
  1 commentaire
Amine Ben Ayara
Amine Ben Ayara le 5 Oct 2016
Modifié(e) : Andrei Bobrov le 5 Oct 2016
Good morning Ben, I replied but for some reason, it did not post to your answer as well. Here is what I wrote:
Thank you so much for taking the time to help with this. You wrote a really elaborate code that I am having a hard time using because of the variety of the dimensions of my output matrices. lol Let me make my question simpler and clearer if I may. The objective is to get a set of matrices( one set of output) after every iteration is done (i.e, if i=0:10, then after 11 loops I should have 11 sets of output matrices). This is simply done by increasing one set of variables from one input matrix X(:,2) incrementally by 1 from 0 to 10. So for example, MN is a 3D matrix that has 14680 (5*5) matrices in it. So I need to have one set of MN after each iteration is done so basically 11 MN. here is a more simplified version of my code only focusing on few matrices.
function [MNPr1,MSA1,MSA1Trans] = Prb_Trans_CR7(X, Lam,Y,UnitArea,n,m)
%Carbon Storage convereted by Spatial Unit by period ( Period 1 through 3)
Xv=X
for k=0:10;
[Mtest,MN, MN1, MN2, MN3, Mtest1, Mtest2] = Predict_all( X,Lam,Y)
[ MS1, MS2,MS3,MSA1,MSA2, MSA3, MSA ] =...
MatrixCountnew(Mtest1,Mtest2, MN1, MN2, MN3,Y,UnitArea,n)
MNPr1(k)=MN1;
MSA1Trans(k)=MSA1;
X=Xv;
end

Connectez-vous pour commenter.


Andrei Bobrov
Andrei Bobrov le 5 Oct 2016
Modifié(e) : Andrei Bobrov le 5 Oct 2016
Variant:
function [CrU,AgrCarbonSimu,MN,MN1,MSA1, MSA2, MSA3]...
= CarbonProject(X, Lam,Y,UnitArea,ALLC3P,n,m)
%Carbon Storage convereted by Spatial Unit by period ( Period 1 through 3)
AgrCarbonSimu = zeros(14680,751,3);
xx = bsxfun(@plus,X(:,2),0:750);
MN = cell(751,1);
MN1 = cell(751,1);
MSA1 = cell(751,1);
MSA2 = cell(751,1);
MSA3 = cell(751,1);
CrU = zeros(14680,751);
for k = 1:751;
[Mtest,MN{k}, MN1{k}, MN2, MN3, Mtest1, Mtest2] = Predict_all(xx(:,k),Lam,Y)
[MS1, MS2,MS3,MSA1{k},MSA2{k}, MSA3{k}, MSA ]...
= MatrixCountnew(Mtest1,Mtest2,MN1{k}, MN2, MN3,Y,UnitArea,n);
[CS,CS3030,CSLS,SUMCSLS,CrU(:,k)] = CarbonPixels( ALLC3P,MSA,UnitArea,m );
AgrCarbonSimu(:,k+1,:) = reshape(CrU(:,k),[],3);
end
  1 commentaire
Amine Ben Ayara
Amine Ben Ayara le 5 Oct 2016
Modifié(e) : Andrei Bobrov le 5 Oct 2016
Hello Andrei, Thank you so much for taking the time to help with this. You wrote a really elaborate code that I am having a hard time using because of the variety of the dimensions of my output matrices. lol Let me make my question simpler and clearer if I may. The objective is to get a set of matrices( one set of output) after every iteration is done (i.e, if i=0:10, then after 11 loops I should have 11 sets of output matrices). This is simply done by increasing one set of variables from one input matrix X(:,2) incrementally by 1 from 0 to 10. So for example, MN is a 3D matrix that has 14680 (5*5) matrices in it. So I need to have one set of MN after each iteration is done so basically 11 MN. here is a more simplified version of my code only focusing on few matrices.
function [MNPr1,MSA1,MSA1Trans] = Prb_Trans_CR7(X, Lam,Y,UnitArea,n,m)
%Carbon Storage convereted by Spatial Unit by period ( Period 1 through 3)
Xv=X
for k=0:10;
[Mtest,MN, MN1, MN2, MN3, Mtest1, Mtest2] = Predict_all( X,Lam,Y)
[ MS1, MS2,MS3,MSA1,MSA2, MSA3, MSA ] = ...
MatrixCountnew(Mtest1,Mtest2, MN1, MN2, MN3,Y,UnitArea,n)
MNPr1(k)=MN1;
MSA1Trans(k)=MSA1;
X=Xv;
end
the beginning has Xv=X and closing the code has X=Xv; that's basically used to reset the values of X(:,2) after each iteration is done. I hope I explained better! THANK YOU so much

Connectez-vous pour commenter.

Catégories

En savoir plus sur Matrix Indexing dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by