Effacer les filtres
Effacer les filtres

Saving double without overwriting in nested For loop

6 vues (au cours des 30 derniers jours)
Nicola Fairbairn
Nicola Fairbairn le 2 Déc 2019
Modifié(e) : Stephen23 le 15 Déc 2019
Hi there,
I'm currently writing a script to take into a bunch of files (known as spotno) and interate through evey second column from 7 up to 48 effectively extracting a variable in the form of 673x21 double called IndividualGaveFinal (subject to change depending on the spotno) for each spotno. The problem I keep facing is that it's only saving IndividualGaveFinal for the final spotno iteration. What's the best way of altering the code to save IndividualGaveFinal for each spotno for summing all the spotno IndividualGaveFinal variables? I've noted that some mathworks community questions similar to this have recommended creating a preallocated array as shown. I've attached the code below:
arraytest=zeros(673,21);
for spotno=1:processedfilenum
for j=7:2:48
channelA=j ;
channelB=channelA+1;
FCSvarname = ['FCS_C' num2str(channelA) num2str(channelB)];
%define and write array to mat that lists: new channel, original channel, start filter time, stop filter time, total num of photons
%opens FCS_C... and sets as individualFCS data
individualFCS = handles.mat.(FCSvarname);
%Same as time but for Gave data for each FCS_C...
individualGave(:,j) = individualFCS.Gave;
GavecolumnsWithAllZeros = all(time == 0);
individualGavefinal=individualGave(:,~GavecolumnsWithAllZeros);
for arraytest = 1:spotno
sprintf('individualGavefinal');
end
end
end
I'm also aware that there's two ways of doing this:
Saving IndividualGaveFinal for each spotno file seperately or in a struct
Saving IndividualGaveFinal for the first spotno file, then adding the second IndividualGaveFinal spotno, and so on...
Any help would be greatly appreciated!!
Thanks in advance.
  1 commentaire
Stephen23
Stephen23 le 15 Déc 2019
Modifié(e) : Stephen23 le 15 Déc 2019
"'I've noted that some mathworks community questions similar to this have recommended creating a preallocated array as shown."
The code you show does preallocate an array named arraytest:
arraytest=zeros(673,21);
But you never assign anything to it, making that preallocation unused.
Inside the nested loops you completely reallocate this variable (as a loop iterator variable), which means that after the loops' first iteration your preallocated array no longer exists anyway:
for spotno=1:processedfilenum
for j=7:2:48
...
for arraytest = 1:spotno % here you reallocate ARRAYTEST
...
end
end
end
You should probably revise what array preallocation is and look at typical examples of it:

Connectez-vous pour commenter.

Réponses (1)

Anmol Dhiman
Anmol Dhiman le 15 Déc 2019
Assuming the size of all IndividualGaveFinal matrices are same, i.e. 673x21 double. You can use cell array to store the individual matrices. See the below links for more references.
Hope it Helps

Catégories

En savoir plus sur Loops and Conditional Statements 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