性能 – 在Matlab中找到没有NaN的行的最快方法

我想以最快的方式找到没有任何NaN的行的索引,因为我需要做数千次.到目前为止,我尝试了以下两种方法:

find(~isnan(sum(data, 2)));
find(all(~isnan(data), 2));

有没有一种聪明的方法可以加快速度,或者这是最好的方法吗?数据矩阵的维度通常是数千或数百.

编辑:
矩阵乘法可以比和更快,因此对于500 x500以上的矩阵(在我的Matlab 2012a机器中),操作几乎快两倍.所以我的解决方案是:

find(~isnan(data*zeros(size(data,2),1)))

在你提出的两种方法(表示为f和g)中,第一种方法更快(使用timeit):

data=rand(4000);
nani=randi(numel(data),1,500);
data(nani)=NaN;
f= @() find(~isnan(sum(data, 2)));
g= @() find(all(~isnan(data), 2));
h= @() find(~isnan(data*zeros(size(data,2),1)));

timeit(f) 
ans =
     0.0263

timeit(g)
ans =
     0.1489

timeit(h)
ans =
     0.0146
相关文章
相关标签/搜索