首页 文章

在MATLAB中的向量中的非零元素之间插入可变数量的零

提问于
浏览
3

我有一个像这样的矢量:

a = [1,2,3,4,5,6...,n]

我想获得一个像这样的新矢量:

a_new = [1,0,0,2,0,0,3,0,0,4,0,0,5,0,0,6,...,0,0,n]

其中在非零元素之间插入固定数量的零(在上例中为2) . 如果我选择 zero_p=3 ,新的向量将是:

a_new = [1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,...,0,0,0,n]

等等

我怎样才能做到这一点?

3 回答

  • 4

    试试这个:

    zero_p=3;
    a_new=zeros(1, (zero_p+1)*length(a)-zero_p);
    a_new(1:(zero_p+1):end)=a;
    

    (未经测试,但希望有效 . )

  • 5

    有几种方法我可以想到:

    Kronecker产品

    克罗内克产品非常适合这种情况 . 在Matlab中, kron 是您正在寻找的:

    a = 1:4;
    a = kron(a, [1 0 0])
    
    ans = 
    
        1     0     0     2     0     0     3     0     0     4     0     0
    

    或者,一般化的,

    a = 1:4;
    zero_p = 3;
    b = [1 zeros(1,zero_p-1)];
    a = kron(a, b)
    
    ans = 
    
        1     0     0     2     0     0     3     0     0     4     0     0
    

    如果您希望以非零元素结束,则必须执行一个额外步骤:

    a = a(1:end-zero_p);
    

    或者,如果你喜欢单行,整个过程可以这样做:

    a = 1:4;
    zero_p = 3;
    a = [kron(a(1:end-1), [1 zeros(1,zero_p-1)]), a(end)]
    
    ans = 
    
       1     0     0     2     0     0     3     0     0     4
    

    零填充

    可能是最简单的方法和最佳性能:

    a = 1:4;
     zero_p = 3;
     a = [a; zeros(zero_p, size(a, 2))];
     a = a(1:end-zero_p);
    

    矩阵乘法

    同样简单,可读且性能卓越,尽管对于除此特定场景之外的许多情况可能过度杀伤:

    a = 1:4;
    b = [1; zeros(zero_p, 1)];
    a = b*a;
    a = a(1:end-zero_p);
    
  • 0

    x = [1 2 3 4 5];上采样(X,3)

    o / p:1 0 0 2 0 0 3 0 0 4 0 0 5 0 0

    干杯!!

相关问题