Найти меньший массив в большем массиве - PullRequest
0 голосов
/ 26 августа 2018

У меня есть набор данных, состоящий из вектора размером ~ 1 000 000. Я хочу найти индексы того, где найден фиксированный массив (если последовательно найдено 12 или более NaN).

Большинство поисков приводят к выводу ismember() или intersect(), которые, насколько мне известно, не выполняют эту работу (будут возвращаться только там, где есть любой член моего поискового массива NaN).

Я знаю, что мог бы сделать это в цикле for, однако у меня есть более 20 таких наборов данных, и вычисление всех этих данных таким образом займет очень много времени.

Если у кого-то есть недорогой способ сделать это, я был бы очень признателен.

1 Ответ

0 голосов
/ 26 августа 2018

Для этого вы можете использовать strfind.Хотя эта функция не задокументирована, она работает и для числовых векторов:

>> x = [7 4 5 2 4 5];
>> y = [5 2 4];
>> strfind(x, y)
ans =
     3

Однако она не найдет NaN.Это согласуется с тем фактом, что два NaN не равны друг другу :

>> x = [7 4 NaN NaN NaN 5];
>> y = [NaN NaN NaN];
>> strfind(x, y)
ans =
     []

Так что если шаблон, который вы хотите найти, состоит из NaNвам нужно сначала преобразовать в логический вектор:

>> x = [7 4 NaN NaN NaN 5];
>> y = [NaN NaN NaN];
>> xNaN = isnan(x);
>> yNaN = isnan(y);
>> strfind(xNaN, yNaN)
ans =
     3

Или в этом случае вы также можете использовать сверточность :

>> find(conv(xNaN, yNaN, 'valid')==numel(yNaN))
ans =
     3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...