Расширение массива путем добавления фиксированного количества последовательных чисел к каждому элементу - PullRequest
0 голосов
/ 25 декабря 2018

Я хочу добавить фиксированное число последовательных чисел к каждому элементу в массиве.

Например: если array = [32 67 9] и фиксированное число, k = 3;

output     = [32 33 34 35 67 68 69 70 9 10 11 12];

Здесь3 числа после 32 добавляются после 32, а затем то же самое делается для остальных элементов в массиве.

Обратите внимание, что длина массива будет отличаться каждый раз.

1 Ответ

0 голосов
/ 25 декабря 2018

Для более старой версии 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.

...