#arrays #matlab
#массивы #matlab
Вопрос:
У меня есть вектор c:
c = [2 5 3];
Я хочу генерировать векторы с их длиной, равной каждому значению c
в последовательном порядке. Итак, я должен получить 3 вектора:
c1 = [1 2];
c2 = [3 4 5 6 7];
c3 = [8 9 10];
Затем я хочу выровнять эти векторы в массиве ячеек размером 1×3:
out = {c1 c2 c3};
Это может показаться простым, но я не могу понять, как это сделать автоматически. Есть идеи?
Ответ №1:
Вы могли бы использовать mat2cell
для достижения этой цели. Сначала мы создаем массив от 1
до sum(c)
, а затем используем mat2cell
для группировки массива на части, где каждая часть равна размеру каждого элемента c
.
out = mat2cell(1:sum(c), 1, c);
Это уменьшает потребность в промежуточных переменных и напрямую предоставляет вам массив ячеек.
out{1} =
1 2
out{2} =
3 4 5 6 7
out{3} =
8 9 10
Комментарии:
1. Почему не намного проще
out = accumarray(sum(bsxfun(@gt, 1:sum(c), cumsum(c(:))),1).' 1, 1:sum(c), [], @(x){x.'})
? 😛2. @LuisMendo Или версия MATL