2016-05-12 8 views
0

どのように配列(A2)の要素を挿入することができ(A1)/MATLAB

例におけるすべてのn番目場所:ロジック

a1 = [1,10,2,20,3,30,4,40,5,50]; 
a2 = [100,200,300,400,500]; 
n=3 % n would be the position to place the elements found in (a2) every **nth** position in (a1). 
*n is the starting position at which the array a2 is inserted into a1* 

新しいA1場合N = 3A2を挿入した後それには

a1 = [1,100,10,2,200,20,3,300,30,4,400,40,5,500,50]; 

新しいA1のようになります場合のn = 2それにA2を挿入した後

a1 = [1,10,100,2,20,200,3,30,300,4,40,400,5,50,500]; 

よう新しいA1を見てしまうもしがn = 1を挿入した後それにA2

a1 = [100,1,10,200,2,20,300,3,30,400,4,40,500,5,50]; 

のようになります。私は

a1(1:3:end,:) = a2; 

を試してみましたが、私は寸法がエラーを不一致取得します。

これは単なる例であるため、私は答えを計算できません。データを配列に挿入する必要があります。 NアレイA2次いで、合わせたサイズの配列を割り当てるために必要なインデックスの両方元の配列を挿入A1

+0

にしたい行をシフトするcircshiftを使用することですあなたの例では、 'n2 'の位置に' a2'の要素を挿入していないようですが、 'n'の位置から3番目の位置に挿入しています。それはあなたが達成しようとしていることですか? – beaker

+0

@beakerはい、このインスタンスではあなたは正しいです –

+0

"このインスタンスで"は、他のインスタンスの動作が異なることを意味します。どのような行動がすべての場合にあるべきか私たちに教えない限り、誰もあなたを助けることはできないと思います。 – beaker

答えて

1

最初に挿入された開始位置です。 a2とすれば簡単ですが、n:n:endを使うことができます。あなたはすべてのインデックスのセットからa2インデックスのセットを引くことができa1のためのインデックスを取得するには、次の

a1 = [1,10,2,20,3,30,4,40,5,50]; 
a2 = [100,200,300,400,500]; 
n = 3; 

res = zeros(1,length(a1)+length(a2)); 
res(n:n:n*length(a2)) = a2; 
a1Ind = setdiff(1:length(res), n:n:n*length(a2)); 
res(a1Ind) = a1; 

>> res 
res = 
    1 10 100  2 20 200  3 30 300  4 40 400  5 50 500 
+0

ありがとうございますが、nの値をn = 2またはn = 1に変更すると、エラー "A:(I)= X:Xは同じサイズでなければなりません"というエラーが表示されます。 N番目の場所1または2 –

+0

[OK]を、それをより一般的にするために回答を編集しました。 'a2'インデックスのセットを制限するだけでした。 –

0

別のオプションは、より上位

orig_array=[1:5;10:10:50;100:100:500;1000:1000:5000]; 
row_on_top=3 %row to be on top 

[a1_rows a1_cols]=size(orig_array) 
a1 = circshift(orig_array, [-mod(row_on_top,a1_rows)+1, 0]) 
Anew = zeros(1,a1_rows*a1_cols) 
for n=1:1:a1_rows 
    n 
    insert_idx=[n:a1_rows:a1_cols*a1_rows] %create insert idx 
    Anew(insert_idx(1:a1_cols))=a1(n,:) %insert only 1:a1_cols values 

end 
Anew=Anew(:)