¿Hay alguna manera de evitar que Matlab imprima grandes matrices en la ventana de comandos?
interactive interactive-session (1)
Una posibilidad es sobrecargar la función de display
, que se llama automáticamente cuando ingresa una expresión que no termina con ;
. Por ejemplo, si coloca la siguiente función en una carpeta llamada "@double" en cualquier parte de su ruta de MATLAB, el comportamiento de display
predeterminado se anulará para matrices double
(esto se basa en la pantalla.m de Mohsen Nosratinia para mostrar las dimensiones de la matriz):
% @double/display.m
function display(v)
% DISPLAY Display a variable, limiting the number of elements shown.
name = inputname(1);
if isempty(name)
name = ''ans'';
end
maxElementsShown = 500;
newlines = repmat(''/n'',1,~strcmp(get(0,''FormatSpacing''),''compact''));
if numel(v)>maxElementsShown,
warning(''display:varTooLong'',''Data not displayed because of length.'');
% OR show the first N=maxElementsShown elements
% builtin(''disp'', v(1:maxElementsShown));
elseif numel(v)>0,
fprintf([newlines ''%s = /n'' newlines], name);
builtin(''disp'', v);
end
end
Por ejemplo,
>> xx=1:10
xx =
1 2 3 4 5 6 7 8 9 10
>> xx=1:1e4
Warning: Data not displayed because of length.
> In double.display at 17
EDITAR : Actualizado para respetar ''compact''
preferencia de formato de salida ''compact''
y ''loose''
.
EDITAR 2 : evitar la disposición de una matriz vacía. Esto hace que whos
y otros comandos eviten una display
innecesaria.
¿Hay una opción en matlab o un complemento / aplicación o un truco tal que, si está en una sesión de comandos interactiva, cada vez que imprima una matriz demasiado grande para que la vea un humano, redacta la salida a una ¿Advertencia de qué tan grande es la matriz o un resumen (solo unas pocas filas y columnas) de la matriz?
Hay muchas veces en las que quiero examinar una matriz en la ventana de comandos, pero no me di cuenta de cuán grande era, por lo que accidentalmente imprimí todo. O en algún lugar dentro de una función que no me codifiqué, alguien se perdió un punto y coma y le entregué una gran matriz, y lo descarga todo en mi ventana de comando.
Tiene sentido que en el 99,99% del tiempo, las personas no tengan la intención de imprimir una matriz de un millón de filas en su ventana de comandos interactiva, ¿verdad? Hace spam completamente su búfer de desplazamiento y elimina toda la información útil que tenía en la pantalla antes.
Por lo tanto, tiene mucho más sentido que matlab asuma automáticamente que el usuario en sesiones interactivas desea generar un resumen de una gran matriz, en lugar de verter todo el contenido en la ventana de comandos. Debe haber al menos una opción de este tipo en la configuración.