【问题标题】:Opposite of find(isnan)find(isnan) 的对面
【发布时间】:2012-09-16 21:33:20
【问题描述】:

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

【问题讨论】:

  • 请清理您的问题;目前它是矛盾的:您写道:“如果它甚至包含一个 NaN,则应该执行该操作。”以及“为了澄清,我的输入向量可以包含任意数量的 NaN,但我只想要 'action;'如果根本没有,则执行。”
  • 除了find(isnan(myVector)),您应该使用any(isnan(myVector))。它更快更干净,因为any 生成布尔输出而不是向量。
  • 所以应该允许立即选择答案!十分钟的等待意味着我不小心选错了>.

标签: matlab if-statement nan


【解决方案1】:

试试:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:
        if all(~isnan(myVector))
            action;
        end
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-02-16
          • 2020-12-27
          • 1970-01-01
          • 1970-01-01
          • 2011-12-22
          • 1970-01-01
          • 2018-01-05
          • 2011-01-07
          相关资源
          最近更新 更多