2013-02-17 2 views
13

У меня есть вектор x = (1, 2, 3), и я хочу отобразить (распечатать) его как Answer: (1, 2, 3).Как отображать (печатать) вектор в Matlab?

я пытался много подходов, в том числе:

disp('Answer: ') 
strtrim(sprintf('%f ', x)) 

Но я до сих пор не могу получить его на печать в формате, который мне нужен.

Может кто-нибудь указать мне на решение, пожалуйста?

РЕДАКТИРОВАТЬ: Оба значения и (длина) x не известны заранее.

ответ

21

Я предпочитаю следующее, что очиститель:

x = [1, 2, 3]; 
g=sprintf('%d ', x); 
fprintf('Answer: %s\n', g) 

, который выводит

Answer: 1 2 3 
+0

Ницца! Спасибо. :) –

+0

Проблема с этим ответом заключается в том, что для матрицы все строки будут выстраиваться в линию. – Pedro77

+0

Правильно, sprintf может использоваться только с аргументом массива, поэтому матрицы выравниваются. Вы должны применить это к каждой строке и объединить результат. –

1

Вы могли бы попробовать этот способ:

fprintf('%s: (%i,%i,%i)\r\n','Answer',1,2,3) 

Я надеюсь, что это помогает.

+0

Спасибо за ваш ответ, но я не знаю ответа перед запуском программы. Мысль, это очевидно. Кроме того, я даже не знаю длины результирующего вектора. Поэтому мне нужно какое-то общее решение. –

+3

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

6

Вы можете использовать

x = [1, 2, 3] 
disp(sprintf('Answer: (%d, %d, %d)', x)) 

Это приводит к

Answer: (1, 2, 3) 

Для векторов произвольного размера, вы можете использовать

disp(strrep(['Answer: (' sprintf(' %d,', x) ')'], ',)', ')')) 

Альтернативный способ будет

disp(strrep(['Answer: (' num2str(x, ' %d,') ')'], ',)', ')')) 
+2

'fprintf ('% s% s \ b \ b% s \ n', 'Ответ: (', sprintf ('% d,', x), ')');' кажется более понятным и не ('. –

+0

@RomanShapovalov: Я пытался избежать backspace' \ b', потому что, если вы захватили вывод в файл, он будет содержать литеральные обратные пространства. –

+0

Имеет смысл.Вы можете изменить свой код для печати ''% d,'' (обратите внимание на позицию пробела), а затем замените '',)' 'на' ')'', чтобы избежать чрезмерного пространства. –

1

Вот более обобщенное решение, которое печатает все элементы х вектора х в следующем формате:

x=randperm(3); 
s = repmat('%d,',1,length(x)); 
s(end)=[]; %Remove trailing comma 

disp(sprintf(['Answer: (' s ')'], x)) 
+0

Не должна ли последняя строка просто читать 'disp (['Ответ: (' s ')']);'? –

+0

@ H.Muster Это не будет передавать значения x, оно будет печатать: 'Ответ: (% d,% d,% d)'. Обратите внимание, что repmat просто создает синтаксис –

+0

Вы правы; Я неправильно читаю вторую строку вашего кода и поэтому неправильно оцениваю последнюю строку. –

3

Вот еще один подход, который использует функцию Matlab strjoin. С strjoin легко настроить разделитель между значениями.

x = [1, 2, 3]; 
fprintf('Answer: (%s)\n', strjoin(cellstr(num2str(x(:))),', ')); 

Это приводит к: Answer: (1, 2, 3)

0

Для печати вектора, который, возможно, имеет сложный

номер-
fprintf('Answer: %s\n', sprintf('%d ', num2str(x)));