登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
以下是常见的数组合并,但是这里的算法都要求两个数组大小相等,
我在文章的最后写了一个code 能够实现大小不等的数组的合并
1、一维数组直接合并
题目:
数组work1[x1,x2——,xn],work2[y1,y2——,yn],现在要生成一个数组work3,
work3中的数据为[x1,x2,x3--xn,y1,y2--yn];
合并方法:
直接将两个矩阵合并:
A = [1,2,3,4];
B = [-1,-2,-3,-4];
C = zeros(1,size(B,2)+size(A,2)); %这句可以不要;
C = [A, B];
2、一维数组交叉合并:
题目:
数组work1[x1,x2——,xn],work2[y1,y2——,yn],现在要生成一个数组work3,
work3中的数据为[x1,y1,x2,y2——,xn,yn];
合并方法一:
A = [1,2,3,4];
B = [-1,-2,-3,-4];
C = zeros(1,size(B,2)+size(A,2));
C(1:2:end) = A;
C(2:2:end) = B
C =
1 -1 2 -2 3 -3 4 -4
解法二:
A = [1,2,3,4];
B = [-1,-2,-3,-4];
C=[A' B']';
C=reshape(C, 1, length(A)+length(B));
C =
1 -1 2 -2 3 -3 4 -4
解法三:
对于解法二改进:
c=reshape([A;B],1,[]);
这里要注意,只能在v7以上的版本才能使用此法;
解法四:
A = [1,2,3,4];
B = [-1,-2,-3,-4];
C=kron(A,[1 0])+kron(B,[0 1]);
C =
1 -1 2 -2 3 -3 4 -4
很多技巧,试总结以上的方案:
-------------------------------------
A = [1,2,3,4];
B = [-1,-2,-3,-4];
----------------- 1 -----------------
C = zeros(1,size(B,2)+size(A,2));
C(1:2:end) = A;
C(2:2:end) = B;
C=C(:);
------------------2 -----------------
C=[A' B']';
C=reshape(C, 1, length(A)+length(B));
------------------3-------------------
c=reshape([A;B],1,[])
------------------4-------------------
C=kron(A,[1 0])+kron(B,[0 1]);
--------------------------------------
我的code
clc,clear
A = [ 1 2 3 4 5 6 ]
B = [ 10 20 30]
for k=1:length(B)
c(2*k)=B(k);
end
for k=1:length(A)
if k >length(A)*2
c(k)=A(k);
else
c(k*2-1)=A(k);
end
end
c(find(c==0))=[];
c
----------------------------------------------------------------
A =
1 2 3 4 5 6
B =
10 20 30
c =
Columns 1 through 8
1 10 2 20 3 30 4 5
Column 9
6
>>
|