找到(isnan)的对面

时间:2012-09-25 11:08:35

标签: matlab if-statement nan

我正在测试一个向量,看它是否包含任何NaN。如果确实如此,那么我不希望我的行动被执行。如果它不包含NaN,则应执行该操作。目前,我的代码看起来像这样(并且有效):

if find(isnan(myVector))
else
    action;
end

由于if部分中没有任何内容,因此根据else条款执行操作似乎很草率。如何重新构造块,以便我不需要使用else

我已经尝试了以下内容:

if ~find(isnan(myVector))
if find(~isnan(myVector))
if find(isfinite(myVector))

为了澄清,我的输入向量可以包含任意数量的NaN,但我只想要'动作;'如果没有则执行。

4 个答案:

答案 0 :(得分:12)

if all(~isnan(myVector))
    action;
end

答案 1 :(得分:2)

尝试:

if isempty(find(isnan(myVector)))
    action;
end 

答案 2 :(得分:1)

看看this question。如果您的数据集足够小,您可以尝试查找所有NaN元素然后对它们进行计数。

答案 3 :(得分:1)

问题是find返回的是向量而不是布尔值。你想要的是:

length(find(isnan(myVector))) == 0

虽然我承认我不记得matlab如何比较矢量。