数字类的大小

时间:2013-04-19 12:16:35

标签: matlab

问题 How to know the size of a variable in MATLAB 解决了如何判断内存中变量的大小。但有没有办法根据数字类告诉大小?我正在寻找的是一个内置函数,它实现了一个简单的映射表:

  • double - > 8
  • single - > 4
  • int32 - > 4
  • byte - > 1

...等。有没有计算这个的功能,还是我需要自己实现一个小表?

请注意,whos 我正在寻找的内容。鉴于whos显示现有对象的内存使用情况,我想估计我尚未拥有的数据的内存使用情况。

numpy中,我可以使用itemsize的{​​{1}}属性实现此目的:

dtype

3 个答案:

答案 0 :(得分:5)

不确定为什么你不想使用whos,因为这正是你实现这样一个功能的方式:

function numBytes = sizeOf(dataClass)

    % create temporary variable of data type specified
    eval(['var = ' dataClass '(0);']); 

    % Use the functional form of whos, and get the number of bytes   
    W = whos('var');
    numBytes = W.bytes;

end

像这样使用:

>> a = 4;
>> sizeOf(class(a))
ans = 
    8

或者,根据您在评论中描述数据的方式,

>>  your_data_cell = { 
        uint32(5)   int8(4)
        single(5)   char(4)
    };
>> cellfun(@(x) sizeOf(class(x)), your_data_cell)
ans =
     4     1
     4     2

我认为sizeOf()优于直接映射到内部数据类型,因为它可以在用户定义的数据类型上工作,可以通过将'0'传递给构造函数来构造。

答案 1 :(得分:3)

如果您只需要对字符串的单元格数组(类名称)进行简单比较,并映射该类的单个元素的字节大小,那么我将使用硬编码解决方案:

function out = class2byte(in)
numclass = {'double'; 'single'; 'int8'; 'int16'; 'int32'; 'int64'; 'uint8'; 'uint16'; 'uint32'; 'uint64'};
numbytes = [NaN;8;4;1;2;4;8;1;2;4;8];

[~,loc]  = ismember(in(:),numclass);
out      = zeros(size(in));
out(:)   = numbytes(loc+1);
end

一个例子:

>> class2byte({'single','singol','char','int64';'double','double','int32','uint8'}')
ans =
     4     8
   NaN     8
   NaN     4
     8     1

答案 2 :(得分:0)

...
x = zeros(1,1,dataType);
numBytes = sizeof(x);
...

function b = sizeof(x)
   w = whos('x');
   b = w.bytes;
end