How to print value from Structure in MATLAB
古いコメントを表示
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
回答 (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 件のコメント
Stephen john
2022 年 7 月 4 日
編集済み: Stephen john
2022 年 7 月 4 日
Stephen john
2022 年 7 月 4 日
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
2022 年 7 月 4 日
Jonas
2022 年 7 月 5 日
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
2022 年 7 月 19 日
Image Analyst
2022 年 7 月 19 日
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 件のコメント
Stephen john
2022 年 7 月 19 日
Image Analyst
2022 年 7 月 19 日
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
2022 年 7 月 19 日
編集済み: Stephen john
2022 年 7 月 19 日
Image Analyst
2022 年 7 月 19 日
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
2022 年 7 月 19 日
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
2022 年 7 月 19 日
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
2022 年 7 月 20 日
Image Analyst
2022 年 7 月 20 日
編集済み: Image Analyst
2022 年 7 月 20 日
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."?
カテゴリ
ヘルプ センター および File Exchange で Get Started with MATLAB についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!