问题 How to know the size of a variable in MATLAB 解决了如何判断内存中变量的大小。但有没有办法根据数字类告诉大小?我正在寻找的是一个内置函数,它实现了一个简单的映射表:
double
- > 8 single
- > 4 int32
- > 4 byte
- > 1 ...等。有没有计算这个的功能,还是我需要自己实现一个小表?
请注意,whos
不我正在寻找的内容。鉴于whos
显示现有对象的内存使用情况,我想估计我尚未拥有的数据的内存使用情况。
在numpy
中,我可以使用itemsize
的{{1}}属性实现此目的:
dtype
答案 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