Automating variable creation for the output of a function

1 vue (au cours des 30 derniers jours)
Karthik Nagaraj
Karthik Nagaraj le 9 Juil 2021
I have created a function which has upto 10 inputs, which looks like this
varAB=samefn(A, B, randomnum, C,D,E,F,G,H,J,)
The function output is mainly dependent on A and B and the rest inputs are not always varying. But each time I call the 'samefn' with the same inputs, the ouput 'varAB' is different as randonnum is also a input. The outputs I get each time I call the function is as expected.
I have to call this function for almost 1000 times for the same inputs and even keeping same A and B. So I created a loop and saved this in a cell. Now, each cell can be acessed and is working fine.
But my requirement is I want to save the output as unique variable and save as a separate matfile, each time I call the function 'samefn' for example varAB1, varAB2,...varAB100 for one set of A and B. As I have almost 10 sets of A and B, I have almost 10000 variables!
Eventhough acessing data through cell is easy, I want it as a separate variable so If I load it in python I can access these unique variables. If it is in cell format, all the data will stored in some other format which is not useful for my code there.
I know that creating a separate variable is not ideal way and using 'eval' is not advised.
Please help in automating the name of these variables for set of a A and B.
Like for one set A=1000, B=10 I want to save the variable for 1000 iterations like var_A1000_B10_1 up to varA1000_B10_1000
another set A=500, B=20 I want to save the variable for 1000 iterations like var_A500_B20_1 up to varA500_B20_1000.
Thanks!

Réponse acceptée

Walter Roberson
Walter Roberson le 10 Juil 2021
N = 100;
varAB = cell(N,1);
for K = 1 : N
varAB{K} = randi(10,1,1); %except do appropriate work here
end
names = "varAB" + (1:N).';
nc = cell2struct(varAB, names);
save('YourFile.mat', '-struct', 'nc');
whos -file YourFile.mat
Name Size Bytes Class Attributes varAB1 1x1 8 double varAB10 1x1 8 double varAB100 1x1 8 double varAB11 1x1 8 double varAB12 1x1 8 double varAB13 1x1 8 double varAB14 1x1 8 double varAB15 1x1 8 double varAB16 1x1 8 double varAB17 1x1 8 double varAB18 1x1 8 double varAB19 1x1 8 double varAB2 1x1 8 double varAB20 1x1 8 double varAB21 1x1 8 double varAB22 1x1 8 double varAB23 1x1 8 double varAB24 1x1 8 double varAB25 1x1 8 double varAB26 1x1 8 double varAB27 1x1 8 double varAB28 1x1 8 double varAB29 1x1 8 double varAB3 1x1 8 double varAB30 1x1 8 double varAB31 1x1 8 double varAB32 1x1 8 double varAB33 1x1 8 double varAB34 1x1 8 double varAB35 1x1 8 double varAB36 1x1 8 double varAB37 1x1 8 double varAB38 1x1 8 double varAB39 1x1 8 double varAB4 1x1 8 double varAB40 1x1 8 double varAB41 1x1 8 double varAB42 1x1 8 double varAB43 1x1 8 double varAB44 1x1 8 double varAB45 1x1 8 double varAB46 1x1 8 double varAB47 1x1 8 double varAB48 1x1 8 double varAB49 1x1 8 double varAB5 1x1 8 double varAB50 1x1 8 double varAB51 1x1 8 double varAB52 1x1 8 double varAB53 1x1 8 double varAB54 1x1 8 double varAB55 1x1 8 double varAB56 1x1 8 double varAB57 1x1 8 double varAB58 1x1 8 double varAB59 1x1 8 double varAB6 1x1 8 double varAB60 1x1 8 double varAB61 1x1 8 double varAB62 1x1 8 double varAB63 1x1 8 double varAB64 1x1 8 double varAB65 1x1 8 double varAB66 1x1 8 double varAB67 1x1 8 double varAB68 1x1 8 double varAB69 1x1 8 double varAB7 1x1 8 double varAB70 1x1 8 double varAB71 1x1 8 double varAB72 1x1 8 double varAB73 1x1 8 double varAB74 1x1 8 double varAB75 1x1 8 double varAB76 1x1 8 double varAB77 1x1 8 double varAB78 1x1 8 double varAB79 1x1 8 double varAB8 1x1 8 double varAB80 1x1 8 double varAB81 1x1 8 double varAB82 1x1 8 double varAB83 1x1 8 double varAB84 1x1 8 double varAB85 1x1 8 double varAB86 1x1 8 double varAB87 1x1 8 double varAB88 1x1 8 double varAB89 1x1 8 double varAB9 1x1 8 double varAB90 1x1 8 double varAB91 1x1 8 double varAB92 1x1 8 double varAB93 1x1 8 double varAB94 1x1 8 double varAB95 1x1 8 double varAB96 1x1 8 double varAB97 1x1 8 double varAB98 1x1 8 double varAB99 1x1 8 double
Notice that no variable names were dynamically created, but the .mat file has individual variables.
  3 commentaires
Walter Roberson
Walter Roberson le 11 Juil 2021
N = 10;
A = 23;
B = 36;
names = "var_" + A + "_" + B + "_" + (1:N).'
names = 10×1 string array
"var_23_36_1" "var_23_36_2" "var_23_36_3" "var_23_36_4" "var_23_36_5" "var_23_36_6" "var_23_36_7" "var_23_36_8" "var_23_36_9" "var_23_36_10"
%or
names = compose("var_%d_%d_%d", A, B, (1:N).')
names = 10×1 string array
"var_23_36_1" "var_23_36_2" "var_23_36_3" "var_23_36_4" "var_23_36_5" "var_23_36_6" "var_23_36_7" "var_23_36_8" "var_23_36_9" "var_23_36_10"
Karthik Nagaraj
Karthik Nagaraj le 11 Juil 2021
Modifié(e) : Karthik Nagaraj le 11 Juil 2021
Thank you Mr Roberson. I had done similar to your first approach. As in the accepted anwer I just modified varAB with strcat, for Var with A and B, with their values and used this outside the loop

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Variables dans Help Center et File Exchange

Produits


Version

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by