猿问

列表中点之间的线性插值

我在python中有一个这样的列表,我想转换成这样的东西。基本上只是用列表中已有的点的插值替换零。有什么想法吗?[4, 0, 0, 6, 0, 8, 0, 0, 0, 3][4, 4.67, 5.33, 6, 7, 8, 6.75, 5.5, 4.25, 3]



泛舟湖上清波郎朗
浏览 137回答 2
2回答

慕标5832272

使用熊猫的一种方式。系列.插值:import pandas as pdpd.Series([i  if i else np.nan for i in l]).interpolate().tolist()输出:[4.0, 4.666666666666667, 5.333333333333333, 6.0, 7.0, 8.0, 6.75, 5.5, 4.25, 3.0]

四季花海

使用累加从迭代工具,您可以找到每个位置周围零条纹的开始和结束索引。然后,使用这些范围计算每个零位置相对于其起始和结束非零范围边界的线性比率:from itertools import accumulaten = [4, 0, 0, 6, 0, 8, 0, 0, 0, 3]starts = accumulate(range(len(n)),lambda a,b: b if n[b] else a)ends   = [*accumulate(reversed(range(len(n))),lambda a,b: b if n[b] else a)][::-1]inter  = [ n[i] or n[s]+(n[e]-n[s])*(i-s)/(e-s) for i,(s,e) in enumerate(zip(starts,ends)) ]# inter = [4, 4.666666666666667, 5.333333333333333, 6, 7.0, 8, 6.75, 5.5, 4.25, 3]该列表将包含每个位置的上一个非零值的索引(对于非零值,使用位置本身):starts[0, 0, 0, 3, 3, 5, 5, 5, 5, 9]该列表包含下一个非零值的索引ends[0, 3, 3, 3, 5, 5, 9, 9, 9, 9]使用zip组合这两个列表,我们获得计算中间值所需的所有信息:                         start  end    range  position        Interpolation index value start end    value  value  size   in range     ratio        value(i)   n[i]  (s)   (e)    n[s]   n[e]   e-s    i-s       (i-s)/(e-s)   see below 0     4     0     0      4      4      0     0            -----          4 1     0     0     3      4      6      3     1            0.67          4.67 2     0     0     3      4      6      3     2            0.33          5.33 3     6     3     3      6      6      0     0            -----          6 4     0     3     5      6      8      2     1            0.50          7.00 5     8     5     5      8      8      0     0            -----          8 6     0     5     9      8      3      4     1            0.75          6.75 7     0     5     9      8      3      4     2            0.50          5.50 8     0     5     9      8      3      4     3            0.25          4.25 9     3     9     9      3      3      0     0            -----          3在存在的地方保留非零值,并计算零位置的插值。startValue + (endValue-startValue) x InterpolationRatio
随时随地看视频慕课网APP

相关分类

Python
我要回答