- do not use ans as a variable name. This is a name reserved by matlab. The content of ans can change at any time (any time you don't provide an output to a function).
- avoid eval, evalin, etc. like the plague.
- if x == 1 when x is logical (as in your case) is the same as if x. Converting x to double and then comparing to 1 is a complete waste of time.
How to get values of selected variables from workspace?
13 次查看(过去 30 天)
显示 更早的评论
I have a huge number of signals/variables imported into workspace and I require only some selected variables along with values. Every variable is a double array. I have used string compare to get the selected variables but this gives only the names of them but not the values. I have used who which gives me only the names of the variable. Please guide me on how to get the values of each of these variables in a double array format.
load Test_2_4_1.mat;
variables = who;
%h = workspaceHandle;
%V = GetVariable(h,'variables','workspace');
%%to compare n parts of variable names (strings)
variable_list = variables;
ans = strncmpi(variable_list,'PEC',3);
ans_double = +ans;
%k = 1;
i=1;
for k = 1:size(ans_double,1)
if ans_double(k) ==1
selected_signals(i) = (variable_list(k));
%value(i) = workspaceHandle.getVariable(selected_signals(i));
i=i+1;
end
end
selected = selected_signals.';
z = evalin('base','selected');
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/154560/image.png)
0 个评论
采纳的回答
Guillaume
2016-6-29
编辑:Guillaume
2016-6-29
The simplest way is to load your variable into a structure, simply by giving an output to load, then you can use dynamic field names to access your variables:
matcontent = load Test_2_4_1.mat;
usefield = strncmpi(fieldnames(matcontent),'PEC',3);
%instead of a loop you can then convert the structure into a cell array and simply index the cell array:
matcontent = struct2cell(matcontent);
selectedvariables = matcontent(usefield); %cell array of selected variables
Note:
3 个评论
Guillaume
2016-6-29
Before converting the structure to a cell array:
allvars = fieldnames(matcontent);
selectednames = allvars(usefield); %after usefield is created obviously.
Sachin Nag
2018-2-23
Thanks a lot Guillaume. This was a very simple and helpful answer. Easy to understand and works!!
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Structures 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!