2016-06-10 5 views

ответ

1

Вам просто нужно указать форматирование всей первой линии:

s = sprintf('%.17g, %.17g, %.17g\n',matrix.') 

MATLAB поддерживает повторное использование строки форматирования, пока есть элементы остаются в matrix.

Обобщая этот процесс, используйте следующее выражение:

s = sprintf([strjoin(repmat({'%.17g'},1,size(matrix,2)), ', ') '\n'], matrix.') 

Так много происходит в этой одной строке - давайте распаковать его изнутри:

repmat({'%.17g'},1,size(matrix,2)) 

Этот подвыражении принимает один массив ячеек размером 1x1, содержащий строку %.17g, и дублирует его в массив ячеек с размерами, указанными в следующих двух аргументах. Мы хотим построить массив ячеек с одной строкой (следовательно, аргумент 1), представляющий все спецификаторы формата (%...), которые нам нужны. Поскольку для каждого столбца мы хотим получить один экземпляр из %.17g, мы используем size(matrix,2) в качестве последнего аргумента для repmat, так как это возвращает число столбцов матрицы.

В качестве примера, если у вас есть 5 столбцов, вы получите это:

>> repmat({'%.17g'},1,5) 
ans = 
    '%.17g' '%.17g' '%.17g' '%.17g' '%.17g' 

Далее, так как вы хотите столбцы с разделителями запятыми и пробелами, вы можете использовать strjoin():

>> strjoin(repmat({'%.17g'},1,5), ', ') 
ans = 
%.17g, %.17g, %.17g, %.17g, %.17g 

Примечание использование запятой и нескольких пробелов в качестве второго аргумента (разделительная строка) до strjoin(). Отрегулируйте количество пробелов в соответствии с потребностями вашего дисплея. Нам нужно еще одно, чтобы иметь возможность печатать многострочную матрицу - возврат каретки. Для этого мы используем тот факт, что две строки в квадратных скобках [] сцепляются с помощью MATLAB:

[strjoin(repmat({'%.17g'},1,size(matrix,2)), ', ') '\n'] 

Это производит окончательную строку форматирования, что нам нужно. Все, что осталось, состоит в том, чтобы добавить sprintf и передать в аргументе matrix. Как отметил Риджул Судир, вам нужно транспонировать свою матрицу, потому что MATLAB будет спускаться по столбцу, чтобы соединить матричные элементы с спецификаторами формата.

EDIT: Стейси Гриффин был прав относительно операции транспонирования (.') - код был исправлен.

+1

Вам необходимо транспонировать матрицу. Поэтому вместо 'matrix' использовать' matrix.'' –

+0

's = sprintf ('% .17g,% .17g,% .17g \ n', matrix. ')' –

+0

Спасибо, мои извинения ... проверены на симметричной матрице. :) – gariepy

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