Для более старой версии MATLAB (без явного расширения):
function out = q53920251(input, k)
out = reshape( ...
bsxfun(@plus, input(:).', reshape(0:k, [], 1)), ...
1, []);
В более новых версиях (которые допускают более короткий синтаксис):
out = reshape( (0:k).' + array, 1, []);
Способ выше vectorized решения работают путем "добавления" вектора столбца 0:k
к вектору строки, который является входным массивом.Эта операция расширяет оба вектора до правильного размера, затем выполняет суммирование для каждого элемента, что-то вроде того, что вы получаете из этого:
[XX,YY] = ndgrid(0:k, arr);
%{
XX =
0 0 0
1 1 1
2 2 2
3 3 3
YY =
32 67 9
32 67 9
32 67 9
32 67 9
%}
tmp = XX + YY;
Оба решения выше создают тот же массив, что и tmp
промежуточно,
tmp =
32 67 9
33 68 10
34 69 11
35 70 12
, а затем остается просто реорганизовать элементы в вектор-строку, используя reshape
.