Сравнение нескольких столбцов таблицы - PullRequest
0 голосов
/ 07 мая 2020

У меня две таблицы с разным количеством строк и тремя столбцами. Если для определенной строки значения в первом и втором столбце такие же, как в другой таблице, я хочу выбрать значения из третьего столбца. Ниже приведен пример кода, который работает, но поскольку на самом деле у меня более 2 миллионов строк в обеих таблицах, его выполнение занимает очень много времени. Есть ли способ ускорить код, избавившись от циклов?

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

1 Ответ

1 голос
/ 07 мая 2020

Идеальный сценарий для пересечения :

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...