【问题标题】:Python programming - numpy polyfit saying NANPython 编程 - numpy polyfit 说 NAN
【发布时间】:2012-11-20 11:39:19
【问题描述】:

我编写的一段非常简单的代码遇到了一些问题。我有 4 组数据,并且想使用 numpy polyfit 生成多项式最佳拟合线。其中 3 个列表在使用 polyfit 时产生数字,但第三个数据集在使用 polyfit 时产生 NAN。下面是代码和打印出来的。有任何想法吗?

代码:

所有的'ind_#'都是数据列表。下面将它们转换为 numpy 数组,然后可以生成多项式最佳拟合线

ind_1=np.array(ind_1, np.float)

dep_1=np.array(dep_1, np.float)

x_1=np.arange(min(ind_1)-1, max(ind_1)+1, .01)

ind_2=np.array(ind_2, np.float)

dep_2=np.array(dep_2, np.float)

x_2=np.arange(min(ind_2)-1, max(ind_2)+1, .01)

ind_3=np.array(ind_3, np.float)

dep_3=np.array(dep_3, np.float)

x_3=np.arange(min(ind_3)-1, max(ind_3)+1, .01)

ind_4=np.array(ind_4, np.float)

dep_4=np.array(dep_4, np.float)

x_4=np.arange(min(ind_4)-1, max(ind_4)+1, .01)

Below 打印出上面生成的数组,以及 polyfit 列表的内容,通常是多项式方程的系数,但对于下面的第三种情况,所有 polyfit 内容都打印为 NAN

print(ind_1)

print(dep_1)

print(np.polyfit(ind_1,dep_1,2))

print(ind_2)

print(dep_2)

print(np.polyfit(ind_2,dep_2,2))

print(ind_3)

print(dep_3)

print(np.polyfit(ind_3,dep_3,2))

print(ind_4)

print(dep_4)

print(np.polyfit(ind_4,dep_4,2))

打印出来:

[ 1.405  1.871  2.713 ...,  5.367  5.404  2.155]

[ 0.274  0.07   0.043 ...,  0.607  0.614  0.152]

[ 0.01391925 -0.00950728  0.14803846]

[ 0.9760001  2.067      8.8       ...,  1.301      1.625      2.007    ]

[ 0.219      0.05       0.9810001 ...,  0.163      0.161      0.163    ]

[ 0.00886807 -0.00868727  0.17793324]

[ 1.143      0.9120001  2.162     ...,  2.915      2.865      2.739    ]

[ 0.283  0.3    0.27  ...,  0.227  0.213  0.161]

[ nan  nan  nan]

[ 0.167  0.315  1.938 ...,  2.641  1.799  2.719]

[ 0.6810001  0.7140001  0.309     ...,  0.283      0.313      0.251    ]

[ 0.00382331  0.00222269  0.16940372]

为什么第三种情况的 polyfit 常量被列为 NAN?所有数据集的数据类型相同,所有代码一致。请帮忙。

【问题讨论】:

  • 您能否向我们展示它失败的所有阵列?该示例也没有将其缩小到足够的范围,您知道 ind_1 和 dep_1 可以工作,那么您可以做 polyfit(ind_1, dep_3, 2) 和 polyfit(ind_3, dep_1,2) 吗?你能把数据画出来,让我们看看它是什么样子的吗?
  • ind_3 或 dep_3 中的数据值必须错误。你能把数据放在某个地方让人们可以尝试吗?我使用了您打印的 ind_3 和 dep_3 的值,没有遇到任何问题。此外,为了清楚起见,也许您可​​以剔除所有其他示例并仅关注不起作用的示例。
  • 我试了会说的,发现NAN polyfit是dep_3数组的结果。该数据集有数千个条目。我怎样才能把它给你?同时,您能否推荐任何我可以尝试的方法,比如搜索类型问题或者我没有想到的搜索数组以查找无效条目?谢谢
  • 两个数据集我都上传了(所以去掉1,2,4集代码就可以使用上面的代码了)。 ind_3 数据集在这里:filedropper.com/baddatasetind3 dep_3 数据集在这里:filedropper.com/baddatasetdep3

标签: python numpy nan


【解决方案1】:

刚刚查看了您的数据。发生这种情况是因为您在 dep_3(元素 713)中有一个 NaN。您可以确保只在拟合中使用有限值,如下所示:

idx = np.isfinite(ind_3) & np.isfinite(dep_3)
print(np.polyfit(ind_3[idx], dep_3[idx], 2))

至于在大型数据集中查找错误值,numpy 让这变得非常容易。您可以像这样找到索引:

print(np.where(~np.isfinite(dep_3)))

【讨论】:

  • 谢谢蒂亚戈。我使用了你的前两行,现在它工作正常。我会手动修复 nan。
  • @user1871337,不用担心。如果它适合你,你可以接受答案:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
  • 1970-01-01
  • 1970-01-01
  • 2018-11-05
  • 2017-02-01
  • 2015-03-30
  • 1970-01-01
相关资源
最近更新 更多