Вам просто нужно указать форматирование всей первой линии:
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: Стейси Гриффин был прав относительно операции транспонирования (.')
- код был исправлен.
Вам необходимо транспонировать матрицу. Поэтому вместо 'matrix' использовать' matrix.'' –
's = sprintf ('% .17g,% .17g,% .17g \ n', matrix. ')' –
Спасибо, мои извинения ... проверены на симметричной матрице. :) – gariepy