【问题标题】:How to ignore NaN's in my data?如何忽略我的数据中的 NaN?
【发布时间】:2013-09-17 23:59:04
【问题描述】:

有什么方法可以忽略函数中的 NaN 吗?

我想得到 eig 值忽略 NaN 因为函数 eig 不处理 NaN

我有矩阵 NxM 并且它包含 NaN 值我必须在其上应用函数 eig 但此函数不适用于 NaN 值所以我将删除 NaN 或者如果有一个函数可以直接像 ( nanmax 它给出了忽略 NaN 的最大值)

【问题讨论】:

  • 您需要添加更多细节 - 您希望您的函数(可能是 eig)如何忽略 NaN 值?您是否希望它忽略包含 NaN 的每一行?还是每一列?或者您可能希望将每个 NaN 值都视为默认值,例如零。不可能以未指定的方式“删除” NaN,否则您最终得到的可能不是实际的数组。
  • 定义“摆脱”。你有一个矩阵,你想找到特征值。有些值是NaN,你打算如何处理tme?想用零替换它们吗?我认为这取决于问题以及您需要处理NaN 值的方式。你不能只是从矩阵中删除它们而不在它们的位置放置一个新值。
  • @SamRoberts 同样的反馈比我快 37 秒 :-)
  • 对不起,我有矩阵 NxM,它包含 NaN 值我必须在其上应用函数 eig,但此函数不适用于 NaN 值,因此我将删除 NaN 或如果有函数直接像(nanmax 它给出忽略 NaN 的最大值)
  • 最后不,没有像 naneig 这样的 nanmax 等价物。这个概念没有意义。

标签: matlab nan


【解决方案1】:

抱歉,没有什么神奇的方法可以忽略矩阵中的 NaN 元素然后计算特征值。您需要数组中的所有元素来计算特征值。其他人建议的检查 NaN 或删除 NaN 的工具根本没有用。如果您只是删除数组的一个元素,则该数组将不再是正方形。所以 MATLAB 把数组变成了向量,这是完全不同的事情!并且将 NaN 转换为 0 极不可能为数组产生有意义的特征值。

像 nanmean 这样的工具也不是很有用,它做的事情很简单。 (Nanmean 可以完成它的工作,因为它计算每列的平均值,其中 NaN 被简单地忽略。它只是对非 NaN 元素求和,然后除以 nan-NaN 的数量。)

最后,如果你有一个不是正方形的 NxM 矩阵,那么计算特征值是没有意义的。特征值仅针对方阵定义。也许您正在考虑奇异值,或者您正在尝试做主成分。在这两种情况下,您仍然需要完整的矩阵,除非您打算简单地删除所有包含 nan 的行或列。

没有免费的午餐。您将需要确定整个矩阵来计算该矩阵的特征值。至少,您需要重新考虑您的问题,因为尝试按照您的要求去做是没有意义的。

【讨论】:

  • 否决这个回复,因为我告诉对方真相?
猜你喜欢
  • 2017-11-24
  • 2018-07-05
  • 2020-10-08
  • 1970-01-01
  • 2017-12-28
  • 2019-02-15
  • 2013-09-14
  • 2021-06-15
  • 2018-06-22
相关资源
最近更新 更多