合并两个数组Matlab

时间:2014-04-30 04:45:53

标签: arrays matlab

我想知道这样做的最短途径,从而提出问题,尽管可以通过多种方式完成。

假设有两个数组

    A1 = [x1 y1
          x2 y2
          x3 y3
          0  0
          0  0
          0  0
          0  0
              ]

   A2 = [a1 b1
          a2 b2
          a3 b3
          a4 b4
          0  0
          0  0
          0  0
              ]

现在,如何以最短的方式合并A1和A2,例如

   A = [x1 y1
        x2 y2
        x3 y3
        a1 b1
        a2 b2
        a3 b3
        a4 b4]

在阵列索引方面很弱。我已经实现了两个for循环和一些if语句来执行此操作,但我觉得有一个最短的方法。你能帮忙吗?

5 个答案:

答案 0 :(得分:3)

这将删除包含全零的所有行,并将A1放在A2之上。这是有效的,因为max执行列式最大值

A=[A1(max(A1')>0,:);A2(max(A2')>0,:)]

答案 1 :(得分:2)

这应该可以完成你的工作。如果

A1 =

 1     2
 3     4
 5     6
 0     0
 0     0
 0     0
 0     0

A2 =

 7     8
 9    10
11    12
13    14
 0     0
 0     0
 0     0

然后

[[nonzeros(A1(:,1)),nonzeros(A1(:,2))];[nonzeros(A2(:,1)),nonzeros(A2(:,2))]] returns

ans =

 1     2
 3     4
 5     6
 7     8
 9    10
11    12
13    14

希望它有所帮助。

编辑| 注意:如果A1 / A2具有[0 x]或[x 0]类型的行,则此解决方案将无效。

答案 2 :(得分:2)

如果您愿意,也可以尝试

A1( all(~A1,2), : ) = []
A2( all(~A2,2), : ) = []
A3=[A1;A2]

前两个语句删除所有零填充行。 第三个语句创建合并的数组。

例如,这是一个例子。

A1=[1,2;3,4;1,5;0,0;0,0]
A2=[7,1;6,1;0,0;0,0;0,0;0,0]
A1( all(~A1,2), : ) = []
A2( all(~A2,2), : ) = []
A3=[A1;A2]

这是输出

删除零之前

A1 =

 1     2
 3     4
 1     5
 0     0
 0     0

A2 =

 7     1
 6     1
 0     0
 0     0
 0     0
 0     0

删除零后 A1 =

 1     2
 3     4
 1     5

A2 =

 7     1
 6     1

合并:

A3 =

 1     2
 3     4
 1     5
 7     1
 6     1

答案 3 :(得分:1)

试试这个:

A = A1;
A(A == 0) = A2(A2 ~= 0);

答案 4 :(得分:1)

我认为这个也属于这里:

A = reshape(nonzeros([A1; A2]),[],2)