BW0*_*BW0 16 matlab interactive interactive-session
在matlab或插件/应用程序或技巧中是否有选项,如果您处于交互式命令会话中,每次打印出一个太大而无法让人看的矩阵,它会将输出编辑为警告矩阵有多大或矩阵的汇总(只有几行和几列)?
有很多次我想在命令窗口中检查一个矩阵,但我没有意识到它有多大,所以我不小心将整个事情打印出来.或者在函数内部的某些地方,我没有自己编码,有人错过了分号,我把它交给了一个大矩阵,它将整个东西转储到我的命令窗口.
有意义的是,在99.99%的时间里,人们不打算在交互式命令窗口中打印一百万行矩阵,对吧?它完全阻止了它们的滚动缓冲区,并删除了之前在屏幕上显示的所有有用信息.
因此,matlab更自然地假设交互式会话中的用户想要输出大矩阵的摘要,而不是将整个事物转储到命令窗口中.在设置中至少应该有这样的选项.
cha*_*pjc 21
一种可能性是重载display函数,当您输入未终止的表达式时,该函数会自动调用;.例如,如果将以下函数放在MATLAB路径上任何位置的名为"@double"的文件夹中,display则将覆盖double数组的默认行为(这是基于Mohsen Nosratinia的display.m来显示矩阵尺寸):
% @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
Run Code Online (Sandbox Code Playgroud)
例如,
>> 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
Run Code Online (Sandbox Code Playgroud)
编辑:更新以尊重'compact'和'loose'输出格式首选项.
编辑2:防止disp铺设空阵列.这使得whos和其他命令避免了不必要的display.