matlab:元素之后插入元素?

pho*_*ein 6 arrays indexing matlab insert

有没有办法在验证某个元素值后将元素插入到数组中?例如,拿

A = [0 0 1 1 0 1 0] 
Run Code Online (Sandbox Code Playgroud)

在数组中的每个1后,我想插入另一个1来获取

Anew = [0 0 1 1 1 1 0 1 1 0] 
Run Code Online (Sandbox Code Playgroud)

但是我想要一种方法来为一般情况编码(任何长度为1行的数组,其中的可能是任何顺序).

Zer*_*ero 5

A = [0 0 1 1 0 1 1];

i = (A == 1);  % Test for number you want insert after
t = cumsum(i);              
idx = [1 (2:numel(A)) + t(1:end-1)];

newSize = numel(A) + sum(i);
N = ones(newSize,1)*5;             % Make this number you want to insert

N(idx) = A
Run Code Online (Sandbox Code Playgroud)

输出:

N =

     0     0     1     5     1     5     0     1     5     0
Run Code Online (Sandbox Code Playgroud)

我将插入的数字5设置为多行,因此很容易看出发生了什么.

如果你想在一个循环中这样做(这就是我在现实生活中如何做到这一点,没有人可以看到我炫耀)

A = [0 0 1 1 0 1 0];

idx = (A == 1);  % Test for number you want insert after
N = zeros(1, numel(A) + sum(idx));
j = 1;
for i = 1:numel(A)
    N(j) = A(i);
    if idx(i)
        j = j+1;
        N(j) = 5;       % Test for number you want to insert after
    end
    j = j+1;
end

N
Run Code Online (Sandbox Code Playgroud)

输出:

N =

 0     0     1     5     1     5     0     1     5     0
Run Code Online (Sandbox Code Playgroud)


bla*_*bla 2

这段代码不是最优雅的,但它会回答你的问题......

 A=[0 0 1 1 0 1 0];
 AA=[];
 for ii=1:length(A);
     AA=[AA A(ii)];
     if A(ii)
         AA=[AA 1];
     end
 end
Run Code Online (Sandbox Code Playgroud)

我确信还会有一种矢量化的方式......