Azzera filtri
Azzera filtri

How to save all outputs that are produced from each iteration in separated cell in one row of array and each row expresses an iteration then store it in one .mat file?

5 visualizzazioni (ultimi 30 giorni)
How to save all the output from each iteration in one .mat file?
Suppose we have the following program and I want to save Pd , C , M that are produced from each iteration in separated cell in one row of array and each row expresses an iteration then store it in one .mat file named Cases.mat.
Pd=[] ;
[Pd{1:7}]=ndgrid([0.5,1]);
Pd=reshape( cat(8,Pd{:}) ,[],7);
Pd = Pd'
for j = 1:size(Pd,2)
Pd(:,j)
C = 5*Pd(:,j)
M = 3*Pd(:,j)
end
Can Anyone help me to achive this?

Risposta accettata

Stephen23
Stephen23 il 4 Mar 2022
Pd = {};
[Pd{1:7}] = ndgrid([0.5,1]);
Pd = reshape(cat(8,Pd{:}),[],7).';
C = 5*Pd;
% M = your code is unclear
save('cases.mat','Pd','C')
  5 Commenti
Stephen23
Stephen23 il 4 Mar 2022
Modificato: Stephen23 il 4 Mar 2022
The most efficient approach is NOT to store them as separate variables, but to store the data in matrices/arrays.
If you are generating the data in a loop then you can use indexing to assign the data to those matrices, just like you would use indexing to get data out of a matrix. For example:
Pd = {};
[Pd{1:7}] = ndgrid([0.5,1]);
Pd = reshape(cat(8,Pd{:}),[],7).';
S = size(Pd);
C = nan(S); % preallocate!
M = nan(S); % preallocate!
for k = 1:S(2)
C(:,k) = 5*Pd(:,k); % presumably your calculation is more complex
M(:,k) = 3*Pd(:,k); % presumably your calculation is more complex
end
save('cases.mat','Pd','C','M')
Of course in this example the loop is not required, as my answer already showed.
If you still really really want to store the data as vectors then store them in two cell arrays.

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Variables in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by