我想知道这样做的最短途径,从而提出问题,尽管可以通过多种方式完成。
假设有两个数组
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语句来执行此操作,但我觉得有一个最短的方法。你能帮忙吗?
答案 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)