6

特定の要素の値を確認した後、要素を配列に挿入する方法はありますか? たとえば、

A = [0 0 1 1 0 1 0] 

配列内の各 1 の後に、別の 1 を挿入して取得したい

Anew = [0 0 1 1 1 1 0 1 1 0] 

ただし、これを一般的なケースでコーディングする方法が必要です(任意の長さの1行配列で、配列は任意の順序である可能性があります)。

4

3 に答える 3

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
于 2012-10-09T05:05:29.683 に答える
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
于 2012-10-09T07:42:55.817 に答える
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

ベクトル化された方法もあると確信しています...

于 2012-10-09T05:05:04.250 に答える