我有一个像这样的矢量:
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 ,新的向量将是:
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 是您正在寻找的:
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
干杯!!
3 回答
试试这个:
(未经测试,但希望有效 . )
有几种方法我可以想到:
Kronecker产品
克罗内克产品非常适合这种情况 . 在Matlab中,
kron
是您正在寻找的:或者,一般化的,
如果您希望以非零元素结束,则必须执行一个额外步骤:
或者,如果你喜欢单行,整个过程可以这样做:
零填充
可能是最简单的方法和最佳性能:
矩阵乘法
同样简单,可读且性能卓越,尽管对于除此特定场景之外的许多情况可能过度杀伤:
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
干杯!!