【问题标题】:Expanding an array by adding a fixed number of sequential numbers to every element通过向每个元素添加固定数量的序列号来扩展数组
【发布时间】:2019-05-24 00:28:08
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: matlab vector addition sequential scalar


    【解决方案1】:

    对于旧 MATLAB 版本(无显式扩展):

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

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

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

    上述矢量化 解决方案的工作方式是将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

    【讨论】:

      猜你喜欢
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-07
      • 1970-01-01
      • 1970-01-01
      • 2021-03-20
      • 1970-01-01
      相关资源
      最近更新 更多