Can you use the whos command to identify classes
5 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Anthony Koning
le 4 Oct 2022
Commenté : Image Analyst
le 5 Oct 2022
As the title says, I'm wondering if the whos command (or an equivilent) could be used to get the range and storage requirements on a class in Matlab. For example, the 'double' class ranges from -10^308 to 10^308 amd needs 8 bytes of storage. How would I get these specs for, say, int8? Lookng on the wiki https://www.mathworks.com/help/matlab/matlab_prog/fundamental-matlab-classes.html does not give this information, so can it be obtained with a script? Thanks
0 commentaires
Réponse acceptée
Walter Roberson
le 5 Oct 2022
numeric_classes = {'int8', 'uint8', 'int16', 'uint16', 'int32', 'uint32', 'int64', 'uint64', 'single', 'double'};
num_classes = length(numeric_classes);
T = table('size', [num_classes, 4], 'VariableNames', {'Class', 'bytes', 'min', 'max'}, ...
'VariableTypes', ["categorical", "double", "categorical", "categorical"]);
numeric_classes_cats = categorical(numeric_classes);
for K = 1 : num_classes
class_name = numeric_classes{K};
class_cat = numeric_classes_cats(K);
sample_variable = zeros(1, 1, class_name);
class_info = whos('sample_variable');
class_bytes = class_info.bytes;
class_bytes_str = string(class_bytes);
if isfloat(sample_variable)
class_max = realmax(class_name);
class_min = -class_max;
class_min_str = categorical(compose("%.16g", class_min));
class_max_str = categorical(compose("%.16g", class_max));
else
class_min = intmin(class_name);
class_max = intmax(class_name);
class_min_str = categorical(class_min);
class_max_str = categorical(class_max);
end
T(K, :) = {class_name, class_bytes_str, class_min_str, class_max_str};
end
T
0 commentaires
Plus de réponses (2)
Image Analyst
le 4 Oct 2022
Try this:
a=uint8([1,2,3]);
dbl = 123.456;
str = 'abc';
s = whos
t = struct2table(s)
3 commentaires
Image Analyst
le 5 Oct 2022
Did you mean a class definition or an instance of a class. Of course a class definition is just a definition of a framework that could contain variables (properties). So you can't get a size of that. However an instance of a class is a variable and you can get the size it uses up with the whos command like I showed.
Image Analyst
le 5 Oct 2022
OK I see what you want now, now that I see Walter's answer which you accepted. Of course Walter has the advantage of having the Mind Reading Toolbox, which I don't have yet.
You wanted the range of built-in classes like uint8, double, etc. I thought you wanted classes like classes you made yourself with the classdef command (like my attached Excel utility class), or instances of those classes (actual variables you instantiated as being an instance of the class) or instances of built-in class variables.
Voir également
Catégories
En savoir plus sur Whos dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!