在较大的数组中查找较小的数组

时间:2018-08-26 14:28:53

标签: arrays matlab performance vector

我有一个由大小为〜1 000 000的向量组成的数据集。我想找到固定数组的索引(连续找到12个或更多NaN时)。

大多数搜索会弹出ismember()intersect(),但据我所知,它们不会完成此工作(只会返回我的NaN搜索数组的任何成员所在的位置)。

我知道我可以在for循环中完成此操作,但是,我有20多个这些数据集,以这种方式计算所有这些数据集将花费很长时间。

如果任何人都可以节省时间,那么我将不胜感激。

1 个答案:

答案 0 :(得分:3)

您可以使用strfind。尽管没有记录,但该函数也适用于数字矢量:

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

但是,找不到NaN。这与two NaN's are not equal to each other

>> 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

或者在这种情况下,您也可以使用convolution

>> find(conv(xNaN, yNaN, 'valid')==numel(yNaN))
ans =
     3