Python编程 - numpy polyfit显示NAN

9
我遇到了一些问题,与我编写的一个非常简单的代码有关。我有4组数据,并希望使用numpy polyfit生成多项式最佳拟合线。当使用polyfit时,其中3个列表会产生数字,但第三个数据集使用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)

以下打印了上面生成的数组以及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)吗?你也能画出数据图表,这样我们就能看到它的外观了吗? - will
2
你的ind_3或dep_3中可能存在错误数据值。能否将数据放在某个地方,以便其他人尝试?我使用了你打印出来的ind_3和dep_3数值,并没有遇到问题。同时,为了更清晰明了,也许你可以删除所有其他的例子,只关注那个有问题的例子。 - tiago
我尝试了will所说的,并发现NAN polyfit结果来自dep_3数组。该数据集有几千个条目。我该如何将其提供给您?同时,您能否推荐我可以尝试的任何事情,例如搜索类型问题或者可能我没有考虑到的搜索无效条目的数组方法?谢谢。 - user1871337
我已经上传了两个数据集(如果您删除1、2、4集代码,则可以使用上面的代码)。ind_3数据集在这里:http://www.filedropper.com/baddatasetind3,dep_3数据集在这里:http://www.filedropper.com/baddatasetdep3。 - user1871337
1个回答

21

我刚刚查看了你的数据。这是因为在dep_3中有一个NaN(元素713)。您可以通过以下方式确保仅使用有限值进行拟合:

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)))

谢谢Tiago,我使用了你的前两行,现在它正常工作了。我会手动修复NaN。 - user1871337
@user1871337,不用担心。如果回答对你有用,你可以接受它 :-) - tiago

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接