【问题标题】:runtimewarning while using lagrange interpolation in numpy在 numpy 中使用拉格朗日插值时出现运行时警告
【发布时间】:2014-07-31 10:00:45
【问题描述】:

我正在尝试在时间序列上实现拉格朗日插值。我的输入格式如下,其中包含两列日期时间和股票价值

'3/8/2012 16:00:00  32.21'
'3/9/2012 16:00:00  32.16'
'3/12/2012 16:00:00 32.2'
'3/13/2012 16:00:00 Missing_1'
'3/14/2012 16:00:00 32.88'
'3/15/2012 16:00:00 32.94'
'3/16/2012 16:00:00 32.95'
'3/19/2012 16:00:00 32.61'
'3/20/2012 16:00:00 32.15'
'3/21/2012 16:00:00 Missing_2'
'3/22/2012 16:00:00 32.09'
'3/23/2012 16:00:00 32.11'
'3/26/2012 16:00:00 Missing_3'

在某些输入情况下,库存值缺失,我试图使用scipy.interpolate 预测这些缺失值

def is_number(s):
    try:
        float(s)
        return True
    except ValueError:
        return False

for k in a: # a is input list
    x,y = k.split("\t")
    if is_number(y):
        x = datetime.datetime.strptime(x,"%m/%d/%Y %H:%M:%S")
        x = time.mktime(x.timetuple())
        y = float(y)
        x_axis.append(x)
        y_axis.append(y)
    else:
        x = datetime.datetime.strptime(x,"%m/%d/%Y %H:%M:%S")
        x = time.mktime(x.timetuple())
        unknown_x.append(x)


x = np.array(x_axis)
y = np.array(y_axis)
unknown = np.array(unknown_x)
y_interp=scipy.interpolate.lagrange(x, y)
for k in unknown:
    print y_interp(k)

但我收到运行时警告,

/var/ml/python/local/lib/python2.7/site-packages/numpy/lib/polynomial.py:728: RuntimeWarning: invalid value encountered in add
  val = NX.concatenate((zr, a1)) + a2
/var/ml/python/local/lib/python2.7/site-packages/numpy/lib/polynomial.py:725: RuntimeWarning: invalid value encountered in add
  val = a1 + a2

【问题讨论】:

  • 不清楚问题是什么。但是,您可以在此处阅读有关 numpy 如何处理数值异常(导致 RuntimeWarning 的原因)以及如何修改它的信息:docs.scipy.org/doc/numpy/user/misc.html

标签: python python-2.7 numpy interpolation data-analysis


【解决方案1】:

您的日期转换中的xs 会产生较大的值。在(拉格朗日)多项式中输入这些值,然后尝试进行插值可能会导致数值不稳定计算(因为,对于较大的 x 来获得相对较小的 y,您将需要较小的系数)。

此外,scipy.interpolate.lagrange 的文档警告说该实现在数值上不稳定。

始终将您的数据标准化为一些合理的数字。您可以减去某个日期;默认使用 1970,unix 零时间,这显然是一个不好的选择。使用您的示例日期,选择例如2012 年 3 月的第一天),或除以中间某处的值(1332000000 可能是一个不错的值)以使所有值都在 1 左右。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    • 2019-09-23
    相关资源
    最近更新 更多