【问题标题】:Interpolate various number of points between values in an array [duplicate]在数组中的值之间插入各种数量的点[重复]
【发布时间】:2020-11-08 19:39:59
【问题描述】:

我创建了一个大小为 50 的数组,例如没有任何值,然后我在随机索引处插入 3 个值,然后我想通过在这些值之间进行插值来填充数组的其余部分。

首先我创建我的数组:

n = 50
a = [None]*n

这给了我一个 50 个插槽的“空数组”:

[None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None]

然后我用值手动替换随机选择的几个“无”:

a.pop(0)
a.insert(0,0)
a.pop(10)
a.insert(10,50)
a.pop(49)
a.insert(49,25000)

给出这个:

[0, None, None, None, None, None, None, None, None, None, 50, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, 25000]

如何填充数组的其余部分,即用我手动添加到数组中的值之间的线性插值计算的实际值替换“无”?

【问题讨论】:

  • 能用numpy、pandas、scipy等库吗?
  • 非常感谢 jonrsharpe、Mr.T 和 ted!这两个答案对我帮助很大,我选择了 Pandas 方式,不知道这个库,而且很简单! a = pandas.Series(a).interpolate().values.round(2).tolist() 干了!

标签: python arrays python-3.x interpolation


【解决方案1】:

我确信有一种聪明的方法可以使用 scipy 的插值来做到这一点。但解决问题的快速方法可能是:

import numpy as np

interpolated = np.empty(len(l))
min_i = 0
min_v = 0
for i, v in enumerate(l):
   if v is not None:
       interpolated[min_i: i + 1] = list(np.linspace(min_v, v, i - min_i + 1))
       min_i = i
       min_v = v
interpolated = list(interpolated)

【讨论】:

    猜你喜欢
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 2012-07-23
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 2022-01-08
    相关资源
    最近更新 更多