我有一个由大小为〜1 000 000的向量组成的数据集。我想找到固定数组的索引(连续找到12个或更多NaN时)。
大多数搜索会弹出ismember()
或intersect()
,但据我所知,它们不会完成此工作(只会返回我的NaN搜索数组的任何成员所在的位置)。
我知道我可以在for循环中完成此操作,但是,我有20多个这些数据集,以这种方式计算所有这些数据集将花费很长时间。
如果任何人都可以节省时间,那么我将不胜感激。
答案 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