Performance 比较几个表列
我有两个不同行数和三列数的表。如果对于某一行,第一列和第二列中的值与另一个表中的值相同,则我希望从第三列中选择值。下面是一个有效的示例代码,但实际上,我在两个表中都有超过200万行,因此需要很长时间才能运行有没有办法通过消除循环来加快代码速度?Performance 比较几个表列,performance,matlab,loops,Performance,Matlab,Loops,我有两个不同行数和三列数的表。如果对于某一行,第一列和第二列中的值与另一个表中的值相同,则我希望从第三列中选择值。下面是一个有效的示例代码,但实际上,我在两个表中都有超过200万行,因此需要很长时间才能运行有没有办法通过消除循环来加快代码速度? MOOSE2=table(['2010/03/30 00:30:00'; '2010/03/22 18:00:00' ; '2010/04/21 18:30:00'; '2010/02/20 02:20:00'; '2010/03/10 02:30:0
MOOSE2=table(['2010/03/30 00:30:00'; '2010/03/22 18:00:00' ; '2010/04/21 18:30:00'; '2010/02/20 02:20:00'; '2010/03/10 02:30:00'],[5 ;8 ;4; 9 ;7],[10; 11 ;12 ;13 ;14]);
Lion2=table(['2010/03/30 00:30:00'; '2010/04/21 18:30:00'; '2010/03/20 22:00:00'; '2010/03/10 02:00:00'],[5;4;6;7],[17;12;11;14]);
[sMOOSE,~]=size(MOOSE2);
[sLion,~]=size(Lion2);
dmoose=[];
dlion=[];
for i=1:sLion
for j=1:sMOOSE
if (MOOSE2.(1)(j,:)==Lion2.(1)(i,:))&(MOOSE2.(2)(j,:)==Lion2.(2)(i,:))
dmoose=[dmoose;MOOSE2.(3)(j,:)];
dlion=[dlion;Lion2.(3)(i,:)];
end
end
end
这给了我正确的输出
dlion =
17
12
dmoose =
10
12
完美场景:
小提示:我认为这是假设键值的组合在输入中是唯一的。(即,它进行一对一匹配,而不是多对多匹配。)如果输入中可能存在重复项,我认为您需要进行内部联接,而不是相交?
MOOSE2=table(['2010/03/30 00:30:00'; '2010/03/22 18:00:00' ; '2010/04/21 18:30:00'; '2010/02/20 02:20:00'; '2010/03/10 02:30:00'],[5 ;8 ;4; 9 ;7],[10; 11 ;12 ;13 ;14]);
Lion2=table(['2010/03/30 00:30:00'; '2010/04/21 18:30:00'; '2010/03/20 22:00:00'; '2010/03/10 02:00:00'],[5;4;6;7],[17;12;11;14]);
[~,moose_index,lion_index] = intersect(MOOSE2(:,1:2),Lion2(:,1:2),'rows');
dlion = Lion2.Var3(lion_index)
dmoose = MOOSE2.Var3(moose_index)