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]

等等

我怎样才能做到这一点?

4

3 回答 3

5

试试这个:

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

(未经测试,但希望可以工作。)

于 2012-08-02T11:58:54.283 回答
5

我能想到几种方法:

克罗内克产品

kronecker 产品非常适合这一点。在 Matlabkron中,您正在寻找的是:

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);
于 2012-08-02T13:02:08.510 回答
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

干杯!!

于 2014-05-01T23:45:01.767 回答