how to refer variable from string name
48 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Yelena Bibineyshvili
am 18 Mai 2021
Kommentiert: Stephen23
am 19 Mai 2021
Hello,
I have an array of string names for variables I need to use, and variables with such names in workspace. How should I refer? for example I need to find mean for variables with names 'm1_n' 'm3_n' specified in array A. The names will be different all the time -- I cant just write mean(m1_n) I need to do it through A and indexing, but in A names are strings.
5 Kommentare
Stephen23
am 19 Mai 2021
"yes they are created by other script"
The best** solution is to fix that other script so that it does not store meta-data (e.g. indices) in variable names.
** best in the sense more efficient (run-time, programming time, debugging time, maintenance time), easier to understand (simpler code, no obfuscation, clear where data comes from), easier to debug (variable highlighting, static code checking, mlint checking), etc.
Akzeptierte Antwort
Jeff Miller
am 19 Mai 2021
Bearbeitet: Jeff Miller
am 19 Mai 2021
This is pretty clumsy, but I think something like this will do what you want:
varnames = {'m1_n', 'm3_n'}; % names of the variables you want to process
save('temp.mat'); % save all workspace variables into a temporary mat file
g = load('temp.mat'); % load all variables into a "global" structure
x = mean(g.(varnames{1})); % get the mean of the first named variable
y = max(g.(varnames{2})); % get the mean of the second named variable
The keys are that (1) the load command makes a structure g with fields corresponding to the names of the original workspace vars, and (2) the syntax g.(s) picks out the field named by the string s.
Don't forget to delete temp.mat.
Weitere Antworten (1)
Steven Lord
am 18 Mai 2021
Can you do this? Yes.
Rather than defining variables with numbered names, consider putting them in an array.
x1 = 1:5;
x2 = x1 + 5;
x3 = x1 + 10;
% or
xmat = [x1; x2; x3];
To iterate through x1, x2, and x3 I'd need to use the discouraged approach. To iterate through the rows of xmat is easy.
for k = 1:size(xmat, 1) % or 1:height(xmat)
y = xmat(k, :)
% Do something with y
end
4 Kommentare
Steven Lord
am 18 Mai 2021
x = cell(1, 3);
for k = 1:3
x{k} = magic(k+2);
end
for k = 1:3
fprintf("Element %d of x is of size %s.\n", k, mat2str(size(x{k})))
end
Siehe auch
Kategorien
Mehr zu Variables finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!