gpt4 book ai didi

python - 将列表插入特定长度?

转载 作者:行者123 更新时间:2023-11-28 17:15:37 25 4
gpt4 key购买 nike

我想增加 python 中列表的长度,而应插入正确位置之间和右侧位置上的缺失值。示例:

[1, 3, 5, 7, 9]

插值到新长度 10 将是:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

这只是双倍大小,可以使用以下插值数学公式求解,而每隔一个值插值一次:

y = y1 + ((y2 - y1)/(x2 - x1)) * (x - x1)

但我想弄清楚,如果长度为 217 的列表需要插值到例如 240 的长度,如何插值。

是否有库提供我不知道的功能?或者有人可以给我举个例子吗?

编辑:列表中的数据是非线性线性的。所以像这样的列表是可能的:

[4.534, 1.2433. 3.353, 2.3452, 6.124, 8.124, 1.232]

最佳答案

一个相对简单的方法是将新列表中的整数索引值映射到原始列表中的“小数索引”,然后使用小数部分在由 interpolated 的整数部分表示的原始列表值之间进行线性插值值和后面的一个(除非小数部分为零)。

例如,如果计算到原始列表中的小数索引是 2.333...,则结果值将是值之间的 13original[2]original[3] 中。

下面是实现这个想法的示例代码:

# For Python 2 compatibility.
from __future__ import division, print_function

def print_list(values):
print('[' + ', '.join(format(value, '.3f') for value in values) + ']')

def interpolate(inp, fi):
i, f = int(fi // 1), fi % 1 # Split floating-point index into whole & fractional parts.
j = i+1 if f > 0 else i # Avoid index error.
return (1-f) * inp[i] + f * inp[j]

inp = [1, 3, 5, 7, 9]
new_len = 10

delta = (len(inp)-1) / (new_len-1)
outp = [interpolate(inp, i*delta) for i in range(new_len)]

print_list(inp)
print_list(outp)

输出:

[1.000, 3.000, 5.000, 7.000, 9.000]
[1.000, 1.889, 2.778, 3.667, 4.556, 5.444, 6.333, 7.222, 8.111, 9.000]

注意:我在 my answer 中做了类似的事情另一个与边缘相关的问题(其中包括可能有助于可视化该过程的图形)。

关于python - 将列表插入特定长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44238581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com