matlab中怎么判断一个向量是否存在NaN
打开 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很有帮助!过来人的意见。谢谢!
判断向量a是否存在NaN,用any(isnan(a)):
>> any(isnan([1 nan]))
ans =
1
>> any(isnan([1 2]))
ans =
0