Inserting variable number of zeros between non-zero elements in a vector in MATLAB
我有一个像这样的向量:
1 | a = [1,2,3,4,5,6...,n] |
,我想获得一个新的向量,如下所示:
1 | a_new = [1,0,0,2,0,0,3,0,0,4,0,0,5,0,0,6,...,0,0,n] |
其中在非零元素之间插入固定数量的零(在上面的示例中为2)。如果选择
1 | 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] |
等
我该怎么做?
我可以想到几种方法:
克罗内克产品
克罗内克(Kronecker)产品非常适合此用途。
在Matlab中,
1 2 3 4 5 6 |
或广义上的
1 2 3 4 5 6 7 8 |
如果要使其以非零元素结尾,则必须执行另一步骤:
1 | a = a(1:end-zero_p); |
或者,如果您喜欢单线,则可以像这样完成整个操作:
1 2 3 4 5 6 7 |
零填充
可能是最简单的方法和最佳的性能:
矩阵乘法
也很简单,易读且性能出色,尽管在此特定情况以外的许多情况下它可能会过大:
1 2 3 4 |
尝试一下:
(未经测试,但有望工作。)
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
干杯!!