zeros funcion for matlab size

funcion - Cómo saber el tamaño de una variable en MATLAB



sum matlab (4)

Escribí una función de conveniencia simple para manejar solo este problema. El uso es:

>> x = ones(1000); >> ByteSize(x) 7.63 Mb

Ejecuto R2007a, por lo que el problema de los objetos de Java que no devuelven los tamaños puede haberse solucionado en versiones posteriores. Aquí está el código:

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

Tengo variables en MATLAB, he comprobado su clase usando class() pero también quiero saber el tamaño que toman en la memoria. Más exactamente, sé que son de tipo doble, y quiero asegurarme de que sean dobles de 32 bits y no de 64 bits.

La versión de MATLAB que estoy usando es R2009b.


Puede usar whos para obtener una matriz de estructuras que describan, entre otras cosas, el tamaño en bytes de cada variable.

Tenga en cuenta que un doble es, por definición, de 64 bits!


Traté de mejorar la función simple ''MatlabSorter'' para manejar este problema. El uso sigue siendo el mismo:

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

adiciones:

1. puede indicar qué tipo de retorno busca: b, kb, mb, tb o pb

2. puede obtener el resultado como una variable sin imprimirlo en la pantalla

Aquí está el código:

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


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

Esto le dará el tamaño en megabytes, por ejemplo MB = 123.78