numpy.polyfit 不处理 NaN 值

numpy.polyfit doesn't handle NaN values

我对这段 Python 代码有疑问:

import matplotlib
matplotlib.use("Agg")

import numpy as np
import pylab as pl

A1=np.loadtxt('/tmp/A1.txt',delimiter=',')
A1_extrema = [min(A1),max(A1)]
A2=np.loadtxt('/tmp/A2.txt',delimiter=',')

pl.close()
ab = np.polyfit(A1,A2,1)
print ab
fit = np.poly1d(ab)
print fit
r2 = np.corrcoef(A1,A2)[0,1]
print r2
pl.plot(A1,A2,'r.', label='TMP36 vs. DS18B20', alpha=0.7)
pl.plot(A1_extrema,fit(A1_extrema),'c-')
pl.annotate('{0}'.format(r2) , xy=(min(A1)+0.5,fit(min(A1))), size=6, color='r' )

pl.title('Sensor correlations')
pl.xlabel("T(x) [degC]")
pl.ylabel("T(y) [degC]")
pl.grid(True)
pl.legend(loc='upper left', prop={'size':8})
pl.savefig('/tmp/C123.png')

A1 和 A2 是包含来自不同传感器的温度读数的数组。我想找到两者之间的相关性并以图形方式显示。 但是,偶尔会发生传感器读取错误。在这种情况下,NaN 将代替温度值插入到其中一个文件中。然后 np.polyfit 拒绝拟合数据,结果 returns [nan, nan]。此后所有其他方法也都失败了。

我的问题:如何说服 numpy.polyfit 忽略 NaN 值? N.B.: 目前数据集相对较小。我预计一旦部署它们可能会增长到大约 200k...600k 元素。

我知道这有点老了,但是如果你的数组中有 NaN,你必须 "clean them up" 只考虑有限的索引。方法是

idx = np.isfinite(x) & np.isfinite(y)
ab = np.polyfit(x[idx], y[idx], 1)

这样你只将 "good" 点传递给 polyfit。