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

时间:2018-12-25 07:27:23

标签: matlab vector addition sequential scalar

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

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

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

在32之后,将32之后的3个数字相加,然后对数组中的其余元素执行相同的操作。

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

1 个答案:

答案 0 :(得分:2)

对于较旧的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将元素重组为行向量。