matlab中怎么判断一个向量是否存在NaN

假设存在好多个向量,有的向量存在NaN元素。用什么样的语句判断某个向量是否存在NaN元素。

1、首先需要知道matlab中nan元素是非数字元素,一般是无效的数据,如下图所示。

2、然后输入a=[1 2 3 nan 4 5 nan 6],创建a矩阵,如下图所示。

3、然后在命令行窗口输入numel(find(isnan(a))),进行统计a矩阵nan元素的个数,如下图所示。

4、按回车键之后,可以看到a矩阵nan元素的个数为2,如下图所示。

5、最后也可以输入numel(a(isnan(a)))来统计a矩阵的nan元素个数,如下图所示。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-02-27

  打开 MATLAB Command window中输入 help NaN,可以看到 NaN(Not-a-Number) 的意思是“不是一个数字”。

  NaN is the IEEE arithmetic representation for Not-a-Number.

  A NaN is obtained as a result of mathematically undefined operations like 0.0/0.0  and inf-inf.

  一个简单的方法是,把该向量直接输在Command window中,然后点回车就可以看到输出的向量中是不是会出现NaN来判断。比方说像下图这样:

  

  如果向量比较复杂,就可以先将程序运行一遍(即将程序中的各个变量赋值保存到workspace中),然后再Command window中输入想查看向量的名称,敲回车后就能看到输出的结果中向量是否含有NaN这一元素。


  如果向量比较复杂,且元素非常多就不适合用这种方法了,可以考虑用命令isnan()语句:

  help isnan

  ISNAN  True for Not-a-Number.

  ISNAN(X) returns an array that contains 1's where the elements of X are NaN's and 0's where they are not. 返回一个与A相同维数的数组,若A的元素为NaN(非数值),在对应位置上返回逻辑1(真),否则返回逻辑0(假)。

  对虚数z,如果z的实部或虚部是NaN,那么isnan(z)函数返回逻辑1,如果实部和虚部都是inf或者有限值,则返回逻辑0。
Matlab中文论坛

  对于任何实数数组A,isfinite(A), isinf(A)和 isnan(A)三个量都等于1。

  For example, ISNAN([pi NaN Inf -Inf]) is [0 1 0 0].

  

  也就是说只要用isnan(向量)的输出结果里面有 1 的话,就是该向量含有 NaN 元素。如果要继续看有多少个 NaN 时,再用一个 any() 命令:

  ANY    True if any element of a vector is a nonzero number or is logical 1 (TRUE).  ANY ignores entries that are NaN (Not a Number).  即返回该向量中逻辑值为真的元素的个数。

  


  总之,对MATLAB指令有什么不懂的可以看help文档,不要说自己英语不好,看help文档真的会学好MATLAB很有帮助!过来人的意见。谢谢!

第2个回答  推荐于2016-06-11

判断向量a是否存在NaN,用any(isnan(a)):

>> any(isnan([1 nan]))
ans =
     1
>> any(isnan([1 2]))
ans =
     0

本回答被提问者和网友采纳
相似回答