How to print value from Structure in MATLAB
Show older comments
Hello Everyone, I hope you are doing well, I have the following Structure which include Prediction and ValueStructure
I want to print the Value from ValueStructure
for Class 1 i have write the following Code.
pred2 = sprintf('Class1 Levels: %d\n Maximum Value of Class1:%d\n Minimum Value of Class1:%d\n',CombineOutput(1).PRFStructure.StagLevels,CombineOutput(1).PRFStructure.StaggMinimumValue,CombineOutput(1).PRFStructure.StaggMaximumValue);
But i am unable to print StagPRFValue. How can i print it.
For Class 2
pred1 = sprintf('Class 2 Levels: %d\n Maximum Value of Class 2:%d\n Minimum Value of Class 2:%d\n ',CombineOutput(2).PRFStructure.Levels,CombineOutput(2).PRFStructure.DSmaximum,CombineOutput(2).PRFStructure.DSminimum);
I want to print unique values of DSPRFValue and DS Length
How can i do that in Matlab
Answers (2)
you can access the 4 doubles in the cell StagPRFValue by e.g.
CombineOutput(1).ValueStructure.StagPRFValue{1}
the other two values can be accessed with
CombineOutput(2).ValueStructure.DSPRFValue
and
CombineOutput(2).ValueStructure.DSlength
if you want the unique values of those vectors, use unique(CombineOutput(2).ValueStructure.DSlength)
6 Comments
Stephen john
on 4 Jul 2022
Edited: Stephen john
on 4 Jul 2022
Stephen john
on 4 Jul 2022
the provided m file does not have the fieldnames you wrote in your question, e,g, neither of of your two structs of CombineOutput has a field PRFStructure
load('matlab (1).mat','CombineOutput')
CombineOutput(1)
CombineOutput(1).ValueStructure
CombineOutput(2)
CombineOutput(2).ValueStructure
edit: to show that the line DOES work
CombineOutput(1).ValueStructure.StagPRFValue{1}
Stephen john
on 4 Jul 2022
Jonas
on 5 Jul 2022
why does it not work? i edited to previous comment to show, that the syntax is right.
Do you get an error, or did you want another output? please be more specific
Stephen john
on 19 Jul 2022
Image Analyst
on 19 Jul 2022
Assuming your sprintf worked to put the right string into pred, you can send pred to the text label component on the GUI like this
app.PredEditField.Value = pred; % Send pred string to the label on the GUI.
If you have any more questions, then attach your .mlapp code after you read this:
10 Comments
Stephen john
on 19 Jul 2022
Image Analyst
on 19 Jul 2022
So I guess you're saying that your pred is not right because the sprintf() is not properly constructed? Did you see my comment about attaching your .mlapp file?
Stephen john
on 19 Jul 2022
Edited: Stephen john
on 19 Jul 2022
Image Analyst
on 19 Jul 2022
Ok, so you won't attach the .mlapp file with the paperclip icon. We'll see what we can do without it.
Try this:
%s = load('StephenJohn.mat')
%CombineOutput = s.CombineOutput
for z = 1: numel(CombineOutput)
thisClass = char(CombineOutput(z).Prediction);
predictedPRI = sprintf('Cluster %1.0f Predicted PRI: "%s".\n',z, thisClass);
fprintf('For z = %d, %s\n', z, predictedPRI)
app.TextArea.Value = predictedPRI;
if contains(thisClass, '1')
predictedPRI = sprintf('Class1 Levels: %d\n Maximum Value of Class1:%d\n Minimum Value of Class1:%d\n', ...
CombineOutput(z).ValueStructure.StagLevels, ...
CombineOutput(z).ValueStructure.StaggMinimumValue, ...
CombineOutput(z).ValueStructure.StaggMaximumValue);
app.TextArea_3.Value = predictedPRI;
elseif contains(thisClass, '2')
predictedPRI = sprintf('Class 2 Levels: %d\n Maximum Value of Class 2:%d\n Minimum Value of Class 2:%d\n ', ...
CombineOutput(z).ValueStructure.Levels, ...
CombineOutput(z).ValueStructure.DSmaximum, ...
CombineOutput(z).ValueStructure.DSminimum);
app.TextArea_2.Value = predictedPRI;
end
end
Stephen john
on 19 Jul 2022
Image Analyst
on 19 Jul 2022
Edited: Image Analyst
on 19 Jul 2022
Try this:
s = load('StephenJohn.mat')
CombineOutput = s.CombineOutput
for z = 1: numel(CombineOutput)
thisClass = char(CombineOutput(z).Prediction);
predictedPRI = sprintf('Cluster %1.0f Predicted PRI: "%s".\n',z, thisClass);
fprintf('For z = %d, %s\n', z, predictedPRI)
app.TextArea.Value = predictedPRI;
% Get the structure
str = CombineOutput(z).ValueStructure;
% Prepare the string.
if contains(thisClass, '1')
predictedPRI = sprintf('Class1 Levels: %d\n Maximum Value of Class1:%d\n Minimum Value of Class1:%d\n', ...
str.StagLevels, ...
str.StaggMinimumValue, ...
str.StaggMaximumValue)
app.TextArea_3.Value = predictedPRI;
elseif contains(thisClass, '2')
predictedPRI = sprintf('Class 2 Levels: %d\n Maximum Value of Class 2:%d\n Minimum Value of Class 2:%d\n ', ...
str.Levels, ...
str.DSmaximum, ...
str.DSminimum)
app.TextArea_2.Value = predictedPRI;
end
end
Stephen john
on 19 Jul 2022
I'm sure you've figured it out by now. You simply add the variable to the sprintf() statement:
s = load('StephenJohn.mat');
CombineOutput = s.CombineOutput;
for z = 1: numel(CombineOutput)
thisClass = char(CombineOutput(z).Prediction);
predictedPRI = sprintf('Cluster %1.0f Predicted PRI: "%s".\n',z, thisClass);
fprintf('For z = %d, %s\n', z, predictedPRI)
app.TextArea.Value = predictedPRI;
% Get the table from the structure. "ValueStructure" is a field of hte structure and it is a table-type variable.
tbl = CombineOutput(z).ValueStructure;
% Prepare the string.
if contains(thisClass, '1')
StagPRFValues = tbl.StagPRFValue{1};
predictedPRI = sprintf('Class1 Levels: %d\n StagePRFValues: [%d, %d, %d, %d]\n Maximum Value of Class1:%d\n Minimum Value of Class1:%d\n', ...
tbl.StagLevels, ...
StagPRFValues, ...
tbl.StaggMinimumValue, ...
tbl.StaggMaximumValue)
app.TextArea_3.Value = predictedPRI;
elseif contains(thisClass, '2')
predictedPRI = sprintf('Class 2 Levels: %d\n Maximum Value of Class 2:%d\n Minimum Value of Class 2:%d\n ', ...
tbl.Levels, ...
tbl.DSmaximum, ...
tbl.DSminimum)
app.TextArea_2.Value = predictedPRI;
end
end
Stephen john
on 20 Jul 2022
Image Analyst
on 20 Jul 2022
Edited: Image Analyst
on 20 Jul 2022
I think you could have figured it out yourself knowing how sprintf() works, but anyway, here is what I got to handle a variable number of elements in the StagPRFValues vector.
s = load('StephenJohn.mat');
CombineOutput = s.CombineOutput;
for z = 1: numel(CombineOutput)
thisClass = char(CombineOutput(z).Prediction);
predictedPRI = sprintf('Cluster %1.0f Predicted PRI: "%s".\n',z, thisClass);
fprintf('For z = %d, %s\n', z, predictedPRI)
app.TextArea.Value = predictedPRI;
% Get the table from the structure. "ValueStructure" is a field of hte structure and it is a table-type variable.
tbl = CombineOutput(z).ValueStructure;
% Prepare the string.
if contains(thisClass, '1')
predictedPRI = sprintf('Class1 Levels: %d\n\n StagePRFValues: [', tbl.StagLevels);
StagPRFValues = tbl.StagPRFValue{1};
numValues = numel(StagPRFValues);
for k = 1 : numValues
predictedPRI = sprintf('%s%d ', predictedPRI, StagPRFValues(k));
end
predictedPRI = sprintf('%s]\n Maximum Value of Class1:%d\n Minimum Value of Class1:%d\n', ...
predictedPRI, ...
tbl.StaggMinimumValue, ...
tbl.StaggMaximumValue)
app.TextArea_3.Value = predictedPRI;
elseif contains(thisClass, '2')
predictedPRI = sprintf('Class 2 Levels: %d\n Maximum Value of Class 2:%d\n Minimum Value of Class 2:%d\n ', ...
tbl.Levels, ...
tbl.DSmaximum, ...
tbl.DSminimum)
app.TextArea_2.Value = predictedPRI;
end
end
I think you should be able to add any additional variables you want to print. If not, see sprintf. If you really can't figure it out based on how I wrote out the other variables, then write back. Otherwise, can you click "Accept this answer."?
Categories
Find more on Cell Arrays in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!