通过向每个元素添加固定数量的序列号来扩展数组

Expanding an array by adding a fixed number of sequential numbers to every element

我想为数组中的每个元素添加固定数量的序号。

例如:如果array = [32 67 9]和定数,k = 3;

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

此处将32后面的3个数字添加到32之后,然后对数组中的其余元素进行相同操作。

请注意,数组长度每次都会不同。

对于较旧的 MATLAB 版本(w/o 显式扩展):

function out = q53920251(input, k)

out = reshape( ...
        bsxfun(@plus, input(:).', reshape(0:k, [], 1)), ...
        1, []);

在较新的版本中(允许使用更短的语法):

out = reshape( (0:k).' + array, 1, []);

上述向量化解决方案的工作方式是"adding"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.

将元素重新组织成一个行向量