2

可能重复:
MATLAB:如何有效地从矩阵中删除 NaN 元素

我得到了下面的代码,但它有点慢(矩阵很大)有没有更好的方法来做到这一点?

errorMat=isnan(rates);
errorRows=ind(errorMat);
for i=1:length(errorRows)
   rates(:,errorRows(i)) = [];
end
4

3 回答 3

8
rates(any(isnan(rates), 2), :) = [];

或者:

rates = rates(~any(isnan(rates), 2), :);

我认为第二种方法更快。

于 2012-10-11T19:03:51.420 回答
1

尝试这个:

[rows, cols] = find(isnan(rates)); 
rates(unique(rows),:) = []

免责声明:未经测试,因为我不在这台机器上使用 Matlab,并且 Octave 抱怨该unique功能。

于 2012-10-11T19:03:46.987 回答
0

另一个变体 - sum with NaNs 返回 a NaN,所以

rates(isnan(sum(rates,2)),:) = [];
于 2012-10-11T19:21:40.960 回答