【发布时间】:2016-05-23 05:43:52
【问题描述】:
我对这段 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 拒绝拟合数据并返回[nan, nan] 作为结果。之后所有其他方法也都失败了。
我的问题:如何说服 numpy.polyfit 忽略 NaN 值?
N.B.:目前数据集相对较小。我预计一旦部署它们可能会增长到大约 200k...600k 个元素。
【问题讨论】:
-
该问题的解决方案有你的答案。在你的情况下,你会做
idx = np.isfinite(A1) & np.isfinite(A2)然后调用 polyfit,ab = np.polyfit(A1[idx], A2[idx], 1)。 -
@farenorth:谢谢。请让您的第二条评论成为答案,我会接受。