Выделение красным (stderr)
Просто для проверки концепции вы можете выделить некоторые данные в командном окне, хотя я бы не советовал делать это на самом деле. Рассмотрим следующий код:
A=randi(10,8);
%ind = find(all(A==0,1),1) %for actual data
ind = 5; %manual choice for demonstration
for k=1:size(A,1)
fprintf('%5d ',A(k,1:ind-1));
fprintf(2,'%5d ',A(k,ind));
fprintf('%5d ',A(k,ind+1:end));
fprintf('\n');
end
Сначала мы создаем фиктивную матрицу для демонстрационных целей и выбираем столбец ind
для выделения. Затем мы идем от строки к строке в A
, мы используем fprintf(...)
для записи невыделенных значений в заданном формате, затем используем fprintf(2,...)
для записи в stderr красным цветом, затем записываем оставшуюся часть строки , затем новая строка. Обратите внимание, что по какой-то причине fprintf(2,...)
не будет выделять последний символ, я думаю, потому что обычно это \n
, и никто не заметил, что там отсутствует подсветка.
Кроме того, вы можете поиграть с форматами внутри fprintf
в соответствии с вашими потребностями. Если вам нужно печатать с плавающей запятой, может подойти что-то вроде '%10.8f'
. Или '%g'
. Суть в том, чтобы иметь фиксированную ширину + точность для печати, чтобы получить красивые столбцы.
Для полноты вы можете сделать обработку нескольких выделяемых столбцов еще более запутанной:
A=randi(10,8);
%ind = find(all(A==0,1)) %for actual data
ind=[5 2];
fprintf('A = \n\n');
for k1=1:size(A,1)
for k2=1:size(A,2)
if ismember(k2,ind)
fprintf(2,'%5d ',A(k1,k2));
else
fprintf('%5d ',A(k1,k2));
end
end
fprintf('\n');
end
fprintf('\n');
Я также добавил несколько дополнительных распечаток, чтобы сделать его красивее. Результат: ![красная подсветка](https://i.stack.imgur.com/kWFfr.png)
Мелирование синим цветом (ссылки)
В качестве запоздалой мысли после некоторого обсуждения с Луис Мендо, я решил, что стоит немного перестараться, пока мы тут. Вы можете превратить свои числа в выделенные синим цветом и подчеркнутые гиперссылки, используя встроенный анализ HTML-тега <a href="URL">link</a>
, реализованный как в disp
, так и в fprintf
. Вот соответствующий код:
A=randi(10,8);
ind=[5 2];
fieldlen=5; %width of output fields, i.e. 5 in '%5d'
fprintf('A = \n\n');
for k1=1:size(A,1)
for k2=1:size(A,2)
if ismember(k2,ind)
fprintf([repmat(' ',1,fieldlen-length(num2str(A(k1,k2)))) '<a href="matlab:">%d</a> '],A(k1,k2));
else
fprintf('%5d ',A(k1,k2));
end
end
fprintf('\n');
end
fprintf('\n');
Это превратит элементы выделенного столбца (столбцов) в строки формы '<a href="matlab:">3</a>'
для примера значения 3.
Еще одна хитрость заключается в том, что гиперссылки, начинающиеся с matlab:
, анализируются как правильные команды Matlab, которые активируются при нажатии на ссылку. Вы можете попробовать это, набрав disp('<a href="matlab:help help">link</a>')
в командном окне. Установив <a href="matlab:">...</a>
, мы гарантируем, что ничего не произойдет, когда кто-то нажмет на выделенные числа со значением ссылки.
И еще одно техническое примечание: мы хотим включить в ссылки только фактическое число (а не предшествующие пробелы), поэтому нам нужно вручную проверить длину строки, которую мы собираемся напечатать (используя length(num2str(A(k1,k2)))
), и вручную включить остальные пробелов перед числом. Это делается с помощью параметра fieldlen
, который я установил в начале: он определяет общую ширину каждого поля печати, т.е. если у нас изначально было fprintf('%5d',...)
, то для того же эффекта нам нужно установить fieldlen=5;
. Результат: ![введите здесь описание изображения](https://i.stack.imgur.com/uXwXv.png)
person
Andras Deak
schedule
23.09.2015
spy
для отображения расположения ненулевых элементов в матрице. В этот сюжет можно было бы добавить какую-то изюминку. Это то, что вы имеете в виду? - person Wauzl   schedule 23.09.2015spy
и его использовании. - person Azhar   schedule 23.09.2015