如何在(a1)
中的每个第n个位置的数组(a2)中插入元素示例:逻辑
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;
但我得到尺寸不匹配错误。
请注意,这只是一个示例,所以我不能只计算答案我需要将数据插入数组。 n 是数组 a2 插入 a1
的起始位置答案 0 :(得分: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
答案 1 :(得分: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(:)