8bi*_*ker 3 matlab vector zero
我有一个像这样的矢量:
a = [1,2,3,4,5,6...,n]
Run Code Online (Sandbox Code Playgroud)
我想获得一个像这样的新矢量:
a_new = [1,0,0,2,0,0,3,0,0,4,0,0,5,0,0,6,...,0,0,n]
Run Code Online (Sandbox Code Playgroud)
其中在非零元素之间插入固定数量的零(在上例中为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]
Run Code Online (Sandbox Code Playgroud)
等等
我怎样才能做到这一点?
试试这个:
zero_p=3;
a_new=zeros(1, (zero_p+1)*length(a)-zero_p);
a_new(1:(zero_p+1):end)=a;
Run Code Online (Sandbox Code Playgroud)
(未经测试,但希望有效.)
我可以想到几种方法:
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
Run Code Online (Sandbox Code Playgroud)
或概括地说
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
Run Code Online (Sandbox Code Playgroud)
如果要使它以非零元素结尾,则必须执行另一步骤:
a = a(1:end-zero_p);
Run Code Online (Sandbox Code Playgroud)
或者,如果您喜欢单线,则可以像这样完成整个操作:
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
Run Code Online (Sandbox Code Playgroud)
可能是最简单的方法和最佳的性能:
a = 1:4;
zero_p = 3;
a = [a; zeros(zero_p, size(a, 2))];
a = a(1:end-zero_p);
Run Code Online (Sandbox Code Playgroud)
同样简单,易读且性能出色,尽管在此特定情况以外的许多情况下它可能会过高:
a = 1:4;
b = [1; zeros(zero_p, 1)];
a = b*a;
a = a(1:end-zero_p);
Run Code Online (Sandbox Code Playgroud)