Если A является векторным подмножеством B, как я могу найти индексы A внутри B в MATLAB? - PullRequest
0 голосов
/ 22 мая 2018

Рассмотрим вектор строки A и вектор строки B. Например:

A = [1 2 3 7 8 10 12];
B = [1 1 2 2 2 3 5 6 6 7 7 7 8 8 10 10 10 11 12 12 12 13 15 16 18 19];

A ранее был проверен как подмножество B. Под подмножеством я конкретно имею в виду, что все элементы в A могут бытьнайдено в B. Я знаю, что элементы в A никогда не повторятся.Тем не менее, элементы в B могут повторяться столько раз или сколько угодно раз.Я проверил это условие, используя:

is_subset = all(ismember(A,B));

Учитывая все это, мне нужно знать индексы элементов A в B, включая время, когда эти элементы повторяются в B. Для примера Aи B выше, результат будет:

C = [1 2 3 4 5 6 10 11 12 13 14 15 16 17 19 20 21];

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Вы можете найти разницу каждого элемента A с B и получить нужные вам индексы.Примерно так:

A = [1 2 3 7 8 10 12];
B = [1 1 2 2 2 3 5 6 6 7 7 7 8 8 10 10 10 11 12 12 12 13 15 16 18 19];
C = [1 2 3 4 5 6 10 11 12 13 14 15 16 17 19 20 21];
tol = 10^-3 ;
N = length(A) ;
iwant = cell(N,1) ;
for i = 1:N
    idx = abs(A(i)-B)<=tol ;
    iwant{i} = find(idx) ;
end
iwant = [iwant{:}] ;
0 голосов
/ 22 мая 2018

Используйте ismember, чтобы найти соответствующие логические индексы.Затем преобразуйте их в линейные индексы, используя find.

C = find(ismember(B,A));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...