MATLAB给我NAN值,无法弄清楚原因

时间:2013-08-07 16:23:05

标签: matlab mean

我确定这里的问题很简单,但我根本无法理解。

我有一个非常简单的数据文件。它是一个带有一列标签的.csv文件,以及一个与每个标签关联的值列。我正在尝试做一些涉及向量的简单操作,但MATLAB一直给我NaN值。

即使我只做mean(vector)我也会得到NaN!

我无法弄清楚原因。载体中没有NaN值。这都是数字。我键入了命令isnumeric(vector)并得到了值1.我使用for循环遍历向量中的每个值,并且它们都是数字。

我已将所有数据复制到新的csv文件中并尝试了。还是只给我NaN。

我根本无法弄清楚这里发生了什么。我对其他向量做同样的事情也没有问题。问题是MATLAB不会告诉我问题是什么或者什么,它只给我NaN。

有关正在发生的事情的任何理论,在这里?或者是否有任何想法检查向量以查看MATLAB在阅读时遇到问题的方法?

我在Mac上使用Matlab R2008a。

2 个答案:

答案 0 :(得分:3)

这将返回据称为NaN的数据索引:

find(isnan(vector))

您还可以使用统计工具箱中的nanmean功能,该功能会忽略数据中的NaN值。实际上存在许多其他常见统计函数的纳米版本,NaN通常用于表示数据集中的空值或“缺失”值。

如果NaNmean(vector)出现在Inf-Inf,则mean([-Inf 1 2 3 Inf])NaN获得any(vector==Inf) && any(vector==-Inf) 而您的数据中没有任何此类值的另一种方式。即,find(isinf(vector)) 返回find(~isfinite(vector))。要检查这一点,您可以执行以下操作:

NaN

然后你可以做

{{1}}

找到指数。最后,{{1}}会找到{{1}}和无限值。

答案 1 :(得分:1)

第一个问题是isnumeric对于NaN和Infs都返回true。以及实际数字。它旨在区分类似数字的值和其他东西(例如,函数句柄或单元格数组)。使用isnan(检测NaN)或isfinite(检测Infs和NaN)。

至少应该让你找到NaN,但接下来你需要弄清楚它们来自哪里。 cvsread并不是特别聪明(它只是在最近的版本中对textscan的美化调用)并且需要全数字数据。

你有一个带有文本标签的标题行,杂散空格,奇怪格式的底片(例如,会计式的字母组合底片(34)),甚至十六进制/八进制数(例如0x42)?请注意,如果指定范围,整个文件必须是数字 EVEN ,这很奇怪且很烦人。