Вы можете использовать repmat
и reshape
, чтобы построить столбцы и (необязательно) добавить их в таблицу для экспорта.
Например:
dates = {'01-May-2019','02-May-2019'};
labels = {'A','B', 'C'};
values = [0, 1, 2];
n_dates = numel(dates);
n_labels = numel(labels);
dates_repeated = reshape(repmat(dates, n_labels, 1), [], 1);
labels_repeated = reshape(repmat(labels, n_dates, 1).', [], 1);
values_repeated = reshape(repmat(values, n_dates, 1).', [], 1);
full_table = table(dates_repeated, labels_repeated, values_repeated);
Дает нам следующую таблицу:
>> full_table
full_table =
6×3 table
dates_repeated labels_repeated values_repeated
______________ _______________ _______________
'01-May-2019' 'A' 0
'01-May-2019' 'B' 1
'01-May-2019' 'C' 2
'02-May-2019' 'A' 0
'02-May-2019' 'B' 1
'02-May-2019' 'C' 2
Который должен экспортироваться в электронную таблицу с writetable
по желанию.
То, что мы делаем с repmat
и reshape
, это "укладка" значений и их преобразование в один столбец:
>> repmat(dates, n_labels, 1)
ans =
3×2 cell array
{'01-May-2019'} {'02-May-2019'}
{'01-May-2019'} {'02-May-2019'}
{'01-May-2019'} {'02-May-2019'}
Мы транспонируем метки и значения так, чтобы они сплетались вместе (например, [0, 1, 0, 1]
против [0, 0, 1, 1]
), так как repmat
является основным столбцом.
Если вам не нужна промежуточная таблица, вы можете использовать num2cell
для создания массива ячеек из values
, чтобы вы могли объединить все 3 массива ячеек вместе для xlswrite
(или writematrix
, добавлено в R2019a, что также не рекомендуется xlswrite
):
values_repeated = num2cell(reshape(repmat(values, n_dates, 1).', [], 1));
full_array = [dates_repeated, labels_repeated, values_repeated];