3

我正在测试一个向量以查看它是否包含任何 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,但我想要 'action;' 如果根本没有就执行。

4

4 回答 4

12
if all(~isnan(myVector))
    action;
end
于 2012-09-25T11:12:35.150 回答
2

尝试:

if isempty(find(isnan(myVector)))
    action;
end 
于 2012-09-25T11:12:09.110 回答
1

看看这个问题。如果您的数据集足够小,您可以尝试找到所有 NaN 元素然后计算它们。

于 2012-09-25T11:14:28.223 回答
1

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

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

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

于 2012-09-25T11:14:50.857 回答