Hi,
I am running simulations and was using the following code to save several matrixes
name1="Data_"$+ftos((n),"%*.*lf",1,0)$+"_"$+ftos((mc),"%*.*lf",1,0)$+"_"$+ftos((spec),"%*.*lf",1,0); saves1=saved(matrixA,name1,0);
where n
, mc
, and pec
are running indexes for my simulation. matrixA
is a matrix which holds the results I am interested in.
Now, I would like to save arrays in a similar way, but I cannot figure out how. An array, say arrayA
holds the results. I would like to do this:
name1="Data_"$+ftos((n),"%*.*lf",1,0)$+"_"$+ftos((mc),"%*.*lf",1,0)$+"_"$+ftos((spec),"%*.*lf",1,0); saves1=saved(arrayA,name1,0);
Could you tell me how I could do this?
1 Answer
0
Use ntos to create the name string
I'll get to the main points of your question next, but I thought you might want to know that you can use ntos
instead of ftos
and it will be much shorter. ntos
will convert a number to a string.
Your name creation code with ntos
would look like this:
name1="Data_"$+ntos(n)$+"_"$+ntos(mc)$+"_"$+ntos(spec);
Options for saving arrays in GAUSS
Save arrays to .fmt files
You can save arrays to .fmt
files using the save
function in GAUSS. Here are some examples:
// Create example 2x3x4 array a = areshape(rndn(24,1), 2|3|4); // Save the array to the file 'a.fmt' save a; // Save the array to 'my_array.fmt' // By default 'save' uses the literal value of // the file name which is my_array in this case save my_array = a; // Set 'name1' equal to Data_22_14_5 n = 22;mc = 14;spec=5; name1="Data_"$+ntos(n)$+"_"$+ntos(mc)$+"_"$+ntos(spec); // The caret symbol, ^, tells GAUSS to use // the value the string is holding instead of // the literal value. save ^name1 = a;
After running the above code, you should have three files in your current working directory: a.fmt
, my_array.fmt
and Data_22_14_5.fmt
. They will all have the same contents.
You can load these files like this:
// Load a.fmt into a variable named 'a' load a; // Load my_array.fmt into a variable named 'my_array' load my_array; // Set 'name1' equal to Data_22_14_5 n = 22;mc = 14;spec=5; name1="Data_"$+ntos(n)$+"_"$+ntos(mc)$+"_"$+ntos(spec); // Load Data_22_14_5.fmt into a variable named 'a2' load a2 = ^name1;
Save arrays to GAUSS Data Archives
You can also save multiple matrices, arrays, strings, etc to a GAUSS Data Archive GDA. Here is an example:
fname = "mydata.gda"; // Create 'mydata.gda'. If a file with that name // already exists, overwrite it. ret = gdaCreate(fname, 1); // Create an example matrix x = rndn(20,4); // Create an example 2x3x4 array a = areshape(rndn(24,1), 2|3|4); vname = "Data_" $+ ntos(1); // Save the contents of 'x' to a variable named 'Data_1' to 'mydata.gda' ret = gdaWrite(fname, x, vname); vname = "Data_" $+ ntos(2); // Save the contents of 'a' to a variable named 'Data_2' to 'mydata.gda' ret = gdaWrite(fname, a, vname);
You can then load the data like this:
vname = "Data_" $+ ntos(1); // Load array named 'Data_1' into a GAUSS variable named 'xx' xx = gdaRead("mydata.gda", vname); vname = "Data_" $+ ntos(2); // Load array named 'Data_2' into a GAUSS variable named 'aa' aa = gdaRead("mydata.gda", vname);
Your Answer
1 Answer
Use ntos to create the name string
I'll get to the main points of your question next, but I thought you might want to know that you can use ntos
instead of ftos
and it will be much shorter. ntos
will convert a number to a string.
Your name creation code with ntos
would look like this:
name1="Data_"$+ntos(n)$+"_"$+ntos(mc)$+"_"$+ntos(spec);
Options for saving arrays in GAUSS
Save arrays to .fmt files
You can save arrays to .fmt
files using the save
function in GAUSS. Here are some examples:
// Create example 2x3x4 array a = areshape(rndn(24,1), 2|3|4); // Save the array to the file 'a.fmt' save a; // Save the array to 'my_array.fmt' // By default 'save' uses the literal value of // the file name which is my_array in this case save my_array = a; // Set 'name1' equal to Data_22_14_5 n = 22;mc = 14;spec=5; name1="Data_"$+ntos(n)$+"_"$+ntos(mc)$+"_"$+ntos(spec); // The caret symbol, ^, tells GAUSS to use // the value the string is holding instead of // the literal value. save ^name1 = a;
After running the above code, you should have three files in your current working directory: a.fmt
, my_array.fmt
and Data_22_14_5.fmt
. They will all have the same contents.
You can load these files like this:
// Load a.fmt into a variable named 'a' load a; // Load my_array.fmt into a variable named 'my_array' load my_array; // Set 'name1' equal to Data_22_14_5 n = 22;mc = 14;spec=5; name1="Data_"$+ntos(n)$+"_"$+ntos(mc)$+"_"$+ntos(spec); // Load Data_22_14_5.fmt into a variable named 'a2' load a2 = ^name1;
Save arrays to GAUSS Data Archives
You can also save multiple matrices, arrays, strings, etc to a GAUSS Data Archive GDA. Here is an example:
fname = "mydata.gda"; // Create 'mydata.gda'. If a file with that name // already exists, overwrite it. ret = gdaCreate(fname, 1); // Create an example matrix x = rndn(20,4); // Create an example 2x3x4 array a = areshape(rndn(24,1), 2|3|4); vname = "Data_" $+ ntos(1); // Save the contents of 'x' to a variable named 'Data_1' to 'mydata.gda' ret = gdaWrite(fname, x, vname); vname = "Data_" $+ ntos(2); // Save the contents of 'a' to a variable named 'Data_2' to 'mydata.gda' ret = gdaWrite(fname, a, vname);
You can then load the data like this:
vname = "Data_" $+ ntos(1); // Load array named 'Data_1' into a GAUSS variable named 'xx' xx = gdaRead("mydata.gda", vname); vname = "Data_" $+ ntos(2); // Load array named 'Data_2' into a GAUSS variable named 'aa' aa = gdaRead("mydata.gda", vname);