插入在MATLAB向量可变数量的非零元素之间的零的(Inserting variable numbe

2019-06-26 17:04发布

我有一个像向量:

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]

等等

我怎样才能做到这一点?

Answer 1:

试试这个:

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

(未经测试,但应该有希望的工作。)



Answer 2:

还有我能想到的几种方法:

克罗内克积

克罗内克产品非常适用于这一点。 在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);


Answer 3:

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

干杯!!



文章来源: Inserting variable number of zeros between non-zero elements in a vector in MATLAB