【发布时间】:2015-07-08 17:19:30
【问题描述】:
我在 Matlab 中有两个矩阵 A 和 B。 A 的维度为mx6,例如
A=[ 1 1 1 1 | 1 0;
1 1 1 2 | 1 0;
1 1 1 3 | 1 0;
1 1 1 4 | 1 0;
1 2 3 2 | 1 0;
1 2 3 3 | 1 0;
1 2 3 4 | 1 0]
B 具有维度 nx6,例如
B=[ 1 1 1 1 | 1 1;
1 2 3 1 | 1 1]
我想合并A 和B 并按照以下步骤创建矩阵C,而不使用循环:
1) 考虑B(i,1:4);如果存在j 使得A(j,1:4) 等于B(i,1:4) [这最多可能发生在一个j] 然后C(i,:)=[B(i,1:4) A(j,5)+B(i,5) A(j,6)+B(i,6)]。为所有i=1,...,n 执行此操作。
2) 将C 的剩余行填入A 和B 中按照步骤1) 无法匹配的行。
在示例中
C=[ 1 1 1 1 | 2 1; %Step 1) above
------------------------------------
1 1 1 2 | 1 0; %Step 2) above
1 1 1 3 | 1 0; %firstly rows from A
1 1 1 4 | 1 0;
1 2 3 2 | 1 0;
1 2 3 3 | 1 0;
1 2 3 4 | 1 0;
1 2 3 1 | 1 1] %lastly rows from B
我尝试使用循环:
%STEP 1
for i=1:size(B,1)
for j=1:size(A,1)
if all(B(i,1:4)==A(j,1:4),2)
C(i,:)=[B(i,1:4) A(j,5)+B(i,5) A(j,6)+B(i,6)]
end
end
end
%STEP 2
C=[ C; A(logical(1-ismember(A(:,1:4), B(:,1:4),'rows')),:)];
C=[ C; B(logical(1-ismember(B(:,1:4), A(:,1:4),'rows')),:)];
【问题讨论】:
-
您是否编写过代码来尝试这样做?你有什么问题?
-
我没有指定我不想使用循环。我不知道如何在不使用循环的情况下回答这个问题。刚刚编辑!
-
请贴出你目前写的代码。
标签: matlab