数字类的大小

ger*_*rit 1 matlab

问题如何知道MATLAB中变量的大小解决了如何判断内存中变量的大小.但有没有办法根据数字类告诉大小?我正在寻找的是一个内置函数,它实现了一个简单的映射表:

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

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

请注意,whos不是我要找的.虽然whos显示了现有对象的内存使用情况,但我想估计我还没有的数据的内存使用情况.

numpy,我可以使用以下itemsize属性实现此目的dtype:

In [6]: dt = dtype([("A", float32, (5,))])

In [7]: M = empty(5, dtype=dt)

In [8]: M.dtype.itemsize
Out[8]: 20
Run Code Online (Sandbox Code Playgroud)

Rod*_*uis 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
Run Code Online (Sandbox Code Playgroud)

使用如下:

>> a = 4;
>> sizeOf(class(a))
ans = 
    8
Run Code Online (Sandbox Code Playgroud)

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

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

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