1

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

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

...ETC。有什么函数可以计算这个,还是我需要自己实现一个小表?

请注意,这不是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
4

3 回答 3

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”传递给构造函数来构建。

于 2013-04-19T13:11:55.720 回答
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
于 2013-04-19T15:15:45.173 回答
0
...
x = zeros(1,1,dataType);
numBytes = sizeof(x);
...

function b = sizeof(x)
   w = whos('x');
   b = w.bytes;
end
于 2016-01-07T21:29:03.987 回答