【发布时间】:2015-07-09 16:35:37
【问题描述】:
我在 Matlab A 中有一个维度为 nx3 的矩阵,例如n=8
A=[ 0.3 2 2;
0.3 7 7;
0.3 10 10;
0 15 15;
0.3 18 2;
0.3 23 7;
0 26 10;
0.3 31 15]
和一个矩阵B,维度为mx4,例如m=17
B=[1 1 0.05 0.05;
2 2 0.22 0.22;
3 3 0.19 0.05;
5 5 0.02 0.02;
6 6 0.19 0 ;
7 7 0.30 0.11;
10 10 0.27 0.08;
11 11 0.19 0 ;
12 12 0.05 0.05;
18 2 0.25 0.08;
19 3 0.25 0.08;
21 5 0.02 0.02;
22 6 0.22 0.08;
23 7 0.22 0.08;
30 14 0.19 0.08;
31 15 0.19 0.08;
32 16 0.05 0.05]
我想在不使用循环的情况下按照以下步骤创建矩阵C:
1) 生成C=[];
2) 考虑B(i,1)。如果存在A(j,2)=B(i,1) [它只能发生一次] 报告C=[ C; B(i,1) B(i,2) B(i,3) B(i,4) A(i,1)]。为i=1,...,m 执行此操作。
3) 考虑B(h,1),这样就没有j 和A(j,2)=B(h,1)。举报C=[C; B(h,1) B(h,2) B(h,3) B(h,4) 0]。为h=1,...,m 执行此操作。
4) 考虑A(h,2),使得B(j,1)=A(h,2) 不存在j。报告C=[C; A(h,2) A(h,3) 0 0 A(h,1)]。为h=1,...,n 执行此操作。
在上面的例子中我想得到
C=[2 2 0.22 0.22 0.3;
7 7 0.30 0.11 0.3;
10 10 0.27 0.08 0.3;
18 2 0.25 0.08 0.3;
23 7 0.22 0.08 0.3;
31 15 0.19 0.08 0.3; %end step 2)
---------------------
1 1 0.05 0.05 0 ;
3 3 0.19 0.05 0 ;
5 5 0.02 0.02 0 ;
6 6 0.19 0 0 ;
11 11 0.19 0 0 ;
12 12 0.05 0.05 0 ;
19 3 0.25 0.08 0 ;
21 5 0.02 0.02 0 ;
22 6 0.22 0.08 0 ;
30 14 0.19 0.08 0 ;
32 16 0.05 0.05 0 ;
----------------------- %end step 3)
15 15 0 0 0 ;
26 10 0 0 0 ] %end step 4)
这些代码可以满足我的要求,但是对于更大的矩阵来说太慢了
C=[];
%Step 1)
for l=1:size(B,1)
for h=1:size(A,1)
if B(l,1)==A(h,2)
C=[C; B(l,:) A(h,1)];
end
end
end
% Steps 2) and 3)
C=[C; ...
[B(logical(1-ismember(B(:,1), A(:,2))),:) zeros(size(B(logical(1-ismember(B(:,1), A(:,2))),:),1),1)];...
[A(logical(1-ismember(A(:,2), B(:,1))),2:3) ...
zeros(size(A(logical(1-ismember(A(:,2), B(:,1)))),1),2) ...
A(logical(1-ismember(A(:,2), B(:,1))),1)]];
【问题讨论】:
-
请添加一些您自己尝试的代码。
-
@Nemesis 我已经添加了循环尝试
-
谢谢。看看我下面的答案。
标签: matlab