2015-10-10 2 views
0

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

Row: [2 4 6 8 10]

Он должен показывать следующее:

1 (2%) 

2 (4%) 

3 (6%) 

4 (8%) 

5 (10%) 

, а не только ответы в командной строке как обычно. Кто-нибудь знает, как это сделать в MATLAB? Большое спасибо. Опять же, у меня есть правильный расчет, я просто не знаю, какой инструмент использовать для форматирования этого выше.

ответ

1
rowc = [2 4 6 8 10]; 
A = [1:numel(rowc);rowc]; 
str = sprintf('%d (%d%%) \n',A); 
disp(str) 
1 (2%) 
2 (4%) 
3 (6%) 
4 (8%) 
5 (10%) 

sprintf позволяет вам создать строку в любом формате вы хотите, проверьте документы конкретики на номер заголовка и специальных символов.

Видимо поведение sprintf унаследована от C, таким образом, он будет получить доступ к любым переменным, вставив в него в виде длинного одного вектор-столбец (т.е. A(:), это называется linear indexing). Это означает, что если вы введете два вектора строк или два вектора столбца, этот код не будет работать. Итак, вы должны создать свой вход как правильную матрицу с учетом линейных индексов, поэтому дополнительная строка объявить A.

+0

'sprintf' правильный, но это не дает правильного выхода для проблемы OP. – IKavanagh

+0

Ваши выходы неправильные ведущие целые числа. Они должны быть 1, 2, 3, 4, 5, но у вас есть 1, 3, 5, 4, 8. – IKavanagh

+0

@IKavanagh Я просто потратил 10 минут на отладку этой вещи. Какой идиот решил, что 'sprintf' принимает переменные как линейные индексы, а не как первый элемент каждого вектора, затем второй из каждого и т. Д. ... – Adriaan

1

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

sprintf('%d (%d%%)\n\n', x, y) 

где x является ведущим значением и y это значение в скобках. Затем с помощью arrayfun мы имеем

>> cell2mat(arrayfun(@(x, y) sprintf('%d (%d%%)\n\n', x, y), 1:numel(rowc), rowc, 'UniformOutput', false)) 
ans = 

1 (2%) 

2 (4%) 

3 (6%) 

4 (8%) 

5 (10%) 

где rowc = [2 4 6 8 10];.

Другой, более простой способ с одной входной функции, если ведущие значения должны быть разделены 2

>> cell2mat(arrayfun(@(x) sprintf('%d (%d%%)\n\n', x/2, x), rowc, 'UniformOutput', false)) 
ans = 

1 (2%) 

2 (4%) 

3 (6%) 

4 (8%) 

5 (10%) 

Примечание: Когда arrayfun используется с 'UniformOutput', false выход представляет собой клетку массив, который мы можем затем преобразовать в матрицу строк, используя cell2mat.

Смежные вопросы