有没有办法在验证某个元素值后将元素插入到数组中?例如,参加
A = [0 0 1 1 0 1 0]
在数组中的每个1后,我想插入另一个1来获取
Anew = [0 0 1 1 1 1 0 1 1 0]
但是我想要一种方法来为一般情况编码(任何长度为1行的数组,其中的可能是任何顺序)。
答案 0 :(得分: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
输出:
N =
0 0 1 5 1 5 0 1 5 0
我将插入的数字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
输出:
N =
0 0 1 5 1 5 0 1 5 0
答案 1 :(得分: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
我确信还会有一种矢量化方式......
答案 2 :(得分:2)
这应该可以解决问题:
>> A = [0 0 1 1 0 1 0]
>>
>> sumA = sum(A);
>> Anew = zeros(1, 2*sumA+sum(~A));
>> I = find(A) + (0:sumA-1);
>> Anew(I) = 1;
>> Anew(I+1) = 8.2;
Anew =
0 0 1 8.2 1 8.2 0 1 8.2 0