Затягивание отображения матриц в MATLAB - PullRequest
3 голосов
/ 27 октября 2011

Мне было интересно, если, кроме использования format compact, есть способ сделать отображение матриц более компактным или более плотным (возможно, сторонний пакет, который предварительно форматирует вывод матрицы ?)

Вот пример матрицы, отображаемой в MATLAB с format compact

enter image description here

Как видно из изображения выше, между столбцами много пустого пространства. Количество пробелов между столбцами является фиксированным, независимо от того, * сколько цифр напечатано в целом по строке или столбцу.

Это пустое пространство теряется, если матрица имеет больше столбцов, чем может представлять в одной строке для заданной ширины командного окна, поскольку, когда это происходит, MATLAB просто разбивает матрицу на несколько подматриц, что затрудняет прочитайте их:

enter image description here

Добавление:

format short немного помогает, поскольку резервирует место только для 4 десятичных знаков (см. Рисунок ниже), но есть ли что-нибудь еще, что делает его еще более плотным (например, то, что дает пользователю контроль над * 1026) * сколько символов зарезервировано для записи )?

Например, сравните это

0 0 0 0 0 1 0 0 1 0
0 0 1 0 0 0 0 0 0 0 
0 0 0 0 1 0 0 0 0 1

с:

enter image description here

Ответы [ 2 ]

5 голосов
/ 27 октября 2011

Интервал по умолчанию, хотя он, вероятно, может быть изменен кем-то, кто действительно знает, что делает , его нельзя изменить.

Если вам действительно нужно контролировать отображение вещей, я предлагаю использовать команду fprintf(1,'...'). Таким образом, вы сможете максимально контролировать то, как это выглядит.

2 голосов
/ 09 сентября 2015

Если вы уверены, что все записи представляют собой целые числа от 0 до 9 (то есть один символ), то вы можете использовать:

fprintf([repmat('%d ',1,size(A,2)) '\n'],A');

, что дает что-то вроде

1 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 1 0 0 
0 0 0 0 0 0 0 0 1 0 
0 1 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 1 
0 0 0 0 0 0 1 0 0 0 
0 0 0 1 1 0 0 0 0 0 
0 1 0 0 0 0 0 0 0 0 
0 0 0 0 1 0 0 0 0 0 
0 0 1 0 0 1 0 0 0 0 

В противном случаедля общих целых чисел вы можете получить форматирование tightest , используя:

fprintf([repmat(sprintf('%% %dd',max(floor(log10(abs(A(:)))))+2+any(A(:)<0)),1,size(A,2)) '\n'],A');

, что дает что-то вроде:

   -111     -3     -2  31061  -2285      2  -2030     -2     -4     34
    579    -31   1166    325 -24273     22    -13     -2     -1    -40
   -150     -2  14166  39317      2     12   5119      9     -7     14
     -4     56   -937  46085   -286     44 -28914    -76  -1477 -26938
  -6661  11121    -63     -4   -275  -2014   4053   -697 -12308   -273
  -2038  -3171  72640   4887    811    252   -114   2214    176     -2
  19837  75428    -21   2038  36152    -11   3782 -33491  11082  -3628
  47025 -42492  73009   6746  -5865 -14310 -51040  -7891     -1   1652
   -223     -3   -566     -4  26892    -13  47538 -26949     -1  58930
  13166     -5    169  78945      7   4135   -681   1863    -83  -2037

Вы можете обернуть их как функции или даже использоватьих перегрузить disp, как это предлагается в комментариях к ФП.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...