MATLAB: операция соединения в стиле SQL - PullRequest
1 голос
/ 03 марта 2012

Я хотел бы сделать соединение в стиле SQL с Matlab.Я мог бы сделать это, создав наборы данных (набор инструментов статистики), выполнив объединение, преобразовав обратно и снова удалив наборы данных:

A1 = [10 10 20 20 30 30 50 50]';
B1 = (10:10:70)';
B2 = (1:7)';

dsA = dataset({A1, 'Key'});
dsB = dataset({B1, 'Key'}, {B2, 'Idx'});
dsA = join(dsA, dsB, 'key', 'Key');

Результат:

Key    Idx
10     1  
10     1  
20     2  
20     2  
30     3  
30     3  
50     5  
50     5  

Мой вопрос: есть ещеспособ сделать это, без использования наборов данных и без циклов ?

Большое спасибо за любую помощь!

1 Ответ

2 голосов
/ 03 марта 2012

Например, вы можете просто использовать ISMEMBER :

[~,loc] = ismember(A1,B1);
dsA = [B1(loc) B2(loc)]

результат:

dsA =
    10     1
    10     1
    20     2
    20     2
    30     3
    30     3
    50     5
    50     5

Примечание: предполагается, что все элементы в A1 находятся в B1. Если это не всегда так, вы можете использовать первый выход ISMEMBER для фильтрации нулевых значений в loc ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...