Automating variable creation for the output of a function

1 visualización (últimos 30 días)
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!

Respuesta aceptada

Walter Roberson
Walter Roberson el 10 de Jul. de 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 comentarios
Walter Roberson
Walter Roberson el 11 de Jul. de 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 el 11 de Jul. de 2021
Editada: Karthik Nagaraj el 11 de Jul. de 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

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Variables en Help Center y File Exchange.

Productos


Versión

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by