2011-01-30 19 views
27

私はMATLABに変数を持っていますが、私はそのクラスをclass()でチェックしましたが、メモリ内のサイズも知りたいと思います。もっと正確に言えば、私はそれらがdouble型であることを知っています.64ビットではなく32ビットのdouble型であることを確認したいのです。MATLABの変数の大きさを知る方法

私が使用しているMATLABのバージョンはR2009bです。

答えて

29

whosを使用すると、とりわけ、各変数のサイズをバイト単位で表す構造体の配列を取得できます。

定義上、倍精度は64ビットです。

27

この問題を処理する簡単な便利機能を作成しました。

私はR2007aを実行しているため、サイズを返さないJavaオブジェクトの問題は、次のリリースで修正されている可能性があります。ここではコードです:

function ByteSize(in, fid) 
% BYTESIZE writes the memory usage of the provide variable to the given file 
% identifier. Output is written to screen if fid is 1, empty or not provided. 

if nargin == 1 || isempty(fid) 
    fid = 1; 
end 

s = whos('in'); 
fprintf(fid,[Bytes2str(s.bytes) '\n']); 
end 

function str = Bytes2str(NumBytes) 
% BYTES2STR Private function to take integer bytes and convert it to 
% scale-appropriate size. 

scale = floor(log(NumBytes)/log(1024)); 
switch scale 
    case 0 
     str = [sprintf('%.0f',NumBytes) ' b']; 
    case 1 
     str = [sprintf('%.2f',NumBytes/(1024)) ' kb']; 
    case 2 
     str = [sprintf('%.2f',NumBytes/(1024^2)) ' Mb']; 
    case 3 
     str = [sprintf('%.2f',NumBytes/(1024^3)) ' Gb']; 
    case 4 
     str = [sprintf('%.2f',NumBytes/(1024^4)) ' Tb']; 
    case -inf 
     % Size occasionally returned as zero (eg some Java objects). 
     str = 'Not Available'; 
    otherwise 
     str = 'Over a petabyte!!!'; 
end 
end 
+0

非常に便利な機能:画面ここで

でそれを印刷せずに変数として結果がコードです – Saikat

9
dt=whos('VARIABLE_YOU_CARE_ABOUT'); MB=dt.bytes*9.53674e-7; 

これはあなたにメガバイト単位でサイズを与えるには、例えばMBは= 123.78

1

私はこの問題を処理するために、「MatlabSorterの」シンプルな機能を強化しようとしました。使い方は同じです:

>> x = ones(1000); 
>> getByteSize(x) 
7.63 mb 

追加:1.youはあなたが求めるリターンの種類を述べることができる

- B、KB、MB、TBまたはPB

2.youを得ることができます

function b = getByteSize(theVariable, returnType, fid) 
% getByteSize returns the mem.usage of the provided variable(theVariable) to the given file 
% identifier. 
% returnType is assigned meaningfully according to the byte size if not stated 
% Output is written to screen if fid is 1, empty or not provided. 
s = whos('theVariable'); 
b = s.bytes; 
if nargin == 1 || isempty(returnType) 
    scale = floor(log(b)/log(1024)); 
    switch scale 
     case 0 
      returnType = 'byte'; 
     case 1 
      returnType = 'kb'; 
     case 2 
      returnType = 'mb'; 
     case 3 
      returnType = 'gb'; 
     case 4 
      returnType = 'tb'; 
     case -inf 
      % Size occasionally returned as zero (eg some Java objects). 
      returnType = 'byte'; 
      warning('Size occasionally returned as zero (eg some Java objects). Bytes assumed'); 
     otherwise 
      returnType = 'petabytes'; 
      warning('Over 1024 petabyte. petabytes assumed'); 
    end 
end 
switch returnType 
    case {'b','byte','bytes'} 
     b = s.bytes; 
    case {'kb','kbs','kilobyte','kilobytes'} 
     b = b/1024; 
    case {'mb','mbs','megabyte','megabytes'} 
     b = b/1024^2; 
    case {'gb','gbs','gigabyte','gigabytes'} 
     b = b/1024^3; 
    case {'tb','tbs','terabyte','terabytes'} 
     b = b/1024^4; 
    case {'pb','pbs','petabyte','petabytes'} 
     b = b/1024^5; 
    otherwise 
     returnType = 'bytes'; 
end 
if nargin <= 2 || isempty(fid) || fid == 1 
    fprintf(1,[num2str(b) ' ' returnType '\n']); 
elseif nargin > 2 && ~isempty(fid) && fid > 2 
    try 
     fprintf(fid,[num2str(b) ' ' returnType '\n']); 
    catch 
     warning(['fid(' num2str(fid) ') could not be edited. Hence the output will be written on the screen.']); 
     fprintf(1,[num2str(b) ' ' returnType '\n']); 
    end 
end 
end 
関連する問題