如何在不创建变量的情况下确定变量的大小?

Gre*_*ack 3 memory size matlab

那可能吗?假设我知道维度,我想确定变量占用多少字节,以便在进行计算之前可以采用适当的过程.经典方式:

A = zeros(500, 500, 500);
whos A;
Run Code Online (Sandbox Code Playgroud)

您可能建议在whos命令后删除变量,但如果MATLAB几乎达到了最大内存容量,则可能无效.有一种优雅的方式来做到这一点?

gno*_*ice 5

对于标准数字类型的矩阵,您需要知道的是矩阵中元素的数量和数据类型中的字节数.对于您的示例,您的矩阵double默认为类型,即8字节,因此您的矩阵总大小将为:

matrixSize = [500 500 500];
byteSize = prod(matrixSize)*8;
Run Code Online (Sandbox Code Playgroud)

您可以使用whos以下方法从该类型的标量变量中找出给定数据类型的字节大小:

temp = uint8(0);           % Sample uint8 variable
varData = whos('temp');    % Get variable data from whos
varBytes = varData.bytes;  % Get number of bytes

varBytes =

     1                     % uint8 takes 1 byte
Run Code Online (Sandbox Code Playgroud)

正如Sam所提到的,像单元格数组结构这样的容器类使计算总字节使用量变得有点复杂,因为它们需要一些内存开销.