在MATLAB中的向量中,在固定数量的非零元素之间插入选定数量的零

时间:2016-06-22 16:22:26

标签: arrays matlab function vector

我有一个矢量        A=[1,2,3,4,5,6,7,8,9,10]; 我想每5个数字插入2个零 结果将是A=[1,2,3,4,5,0,0,6,7,8,9,10,0,0]

我知道我可以预先分配空间,然后使用for循环来分配变量,但如果有更优雅的方式,我就会徘徊。

2 个答案:

答案 0 :(得分:4)

即使A不包含整数个块,这也有效:

A = [1,2,3,4,5,6,7,8,9,10,11,12]; % input vector
m = 5; % block size
n = 2; % number of zeros to be added after each block
B = zeros(1, numel(A)+floor(numel(A)/m)*n); % preallocate to appropriate size
B(mod(0:end-1, m+n)<m) = A; % logical index. Fill values of A at desired positions of B

此示例中的结果是

B =
     1   2   3   4   5   0   0   6   7   8   9  10   0   0  11  12

答案 1 :(得分:1)

如果A的元素数量是5的倍数,您可以使用zeros重新整形和连接,就像这样 -

reshape([reshape(A,5,[]) ; zeros(2,numel(A)/5)],1,[])