假设两个数组现在是
A1 = [x1 y1
x2 y2
x3 y3
0 0
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
0 0]
之前的答案是正确的,它删除了所有的零。但是如何通过索引以最短的方式实现这一点,类似于之前的答案?
更新:
这就是我尝试过的 使用上一个问题的答案
A=[A1(max(A1')>0,:);A2(max(A2')>0,:)]
A = padarray(A,[size(A1,1) - size(A,1) 0],'post')
这是非常微不足道的,但正如我在我的问题中清楚地提到的那样,是否有一个单行答案或一个可以像前一个问题那样实现这一目标的命令?我的主要目标是扩展我的知识基础,如何有效地使用matlab的索引优势,并作为其他人的指南,他们会遇到这个问题,并提出许多建议。
谢谢, LN
答案 0 :(得分:2)
怎么样:
A2(length(A1),2) = 0;
A = A1 + circshift( A2,find(A1(:,1),1,'last'))
答案 1 :(得分:1)
thewaywewalk的答案是:
A = zeros(size(A1));
A(1:nnz([A1;A2])/2,:) = reshape(nonzeros([A1;A2]),[],2)
答案 2 :(得分:0)
基于罗伯特P.的答案(因为OP请求一行答案):
A = [reshape(nonzeros([A1;A2]),[],2); zeros(size(A1,1) - nnz([A1;A2])/2, 2)]