2016-05-12 61 views
0

我怎样才能插入元件以阵列(A2)第n发生在(a1)中插入项目在一个阵列中的八度每第n个位置/ MATLAB

实施例:逻辑

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 = 3的插入 A2 到它看起来像

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

A1如果n = 2的插入A2进去后看起来像

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

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; 

,但我得到的尺寸不匹配错误。

请注意这只是一个例子,所以我不能只是计算一个答案我需要将数据插入到数组Ñ是所述阵列A2插入A1

+0

从你的例子中,你似乎并没有在每个'第n'位置插入'a2'的元素,而是将它们插入到每个'3rd'位置,以'n'开始。那是你想要达到的目标吗? – beaker

+0

@beaker在这种情况下,您是正确的 –

+0

“在此实例中”意味着其他实例的行为不同。除非你告诉我们所有情况下的行为,我认为任何人都无法帮助你。 – beaker

回答

1

首先分配的组合尺寸的阵列,然后插入两个原始阵列所需的索引的开始位置。用a2这很容易,你可以使用n:n:end。要获得指数a1可以从集合中的所有指标减去一套a2指数:

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

好的,编辑答案使其更通用。你只需要限制一组'a2'指数。 –

0

另一种选择是使用circshift到你想要的行移位之上

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(:) 
相关问题