Создание строки данных с разделителями-запятыми из числовых массивов в MATLAB - PullRequest
1 голос
/ 05 июня 2019

У меня есть два массива значений:

t = [0; 1; 2];
q = [0; 100; 200];

Мне нужно, чтобы они были одной строкой, подобной:

str = '0, 0, 1, 100, 2, 200';

Я не могу найти хороший способ сделать это вMATLAB (R2017a) без использования петли.Я хотел бы избежать этого, если это возможно, поскольку существует довольно большой массив значений и множество файлов, и это займет вечность.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 05 июня 2019

Объединение compose с strjoin:

t = [0; 1; 2];
q = [0; 100; 200];
str = strjoin(compose('%d', [t(:)'; q(:)']), ', ');

Выход:

str = 
    '0, 0, 1, 100, 2, 200'

Для нецелых чисел используйте: %f вместо %d

1 голос
/ 05 июня 2019

Вот возможный подход.Это работает для целых чисел, или если вам нужно фиксированное количество десятичных знаков в строковом представлении:

t = [0; 1; 2];
q = [0; 100; 200];
tq = reshape([t(:).'; q(:).'], 1, []);
s = sprintf('%i, ',tq); % or change '%i' to something like '%.5f'
s = s(1:end-2)

Результат:

s =

    '0, 0, 1, 100, 2, 200'

Если у вас есть нецелые числаи если вы хотите, чтобы количество десятичных знаков в представлении выбиралось автоматически, вы можете использовать mat2str вместо sprintf, но затем вам нужно разобраться с пробелами, используя regexpre или аналогичную функцию:

t = [0; 1; 2];
q = [0; 100; 200];
tq = reshape([t(:).'; q(:).'], 1, [])
s = regexprep(num2str(tq), '\s+', ', ');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...