我有一个像向量:
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]
等等
我怎样才能做到这一点?
试试这个:
zero_p=3;
a_new=zeros(1, (zero_p+1)*length(a)-zero_p);
a_new(1:(zero_p+1):end)=a;
(未经测试,但应该有希望的工作。)
还有我能想到的几种方法:
克罗内克积
克罗内克产品非常适用于这一点。 在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);
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