在python中填写2个列表

时间:2016-04-13 20:40:51

标签: python numpy

我有2个名单:

list_a = [2016, 2025, 2050, 2075]
list_b = [34.5, 43.5, 65.8, 88.2]

我想扩展list_a,以便填充2016年到2075年之间的所有值,即2016年,2017年,...... 2074,2075.list_b值应全部线性插值,以便list_a和list_b的长度相同。< / p>

除了可能应用for循环之外,真的不确定如何做到这一点。

3 个答案:

答案 0 :(得分:0)

由于这个问题有numpy标签,我认为它应该使用numpy。

另外,我假设list_a已排序。

numpy.arange(list_a[0], list_a[-1])提供numpy数组[2016, 2017, ...]

numpy.interp(numpy.arange(list_a[0], list_a[-1]), list_a, list_b)为您提供线性互联功能值[34.5, 35.5, ...]

答案 1 :(得分:0)

您可以执行以下非常简单的插值

list_a_final = [i for i in range(list_a[0], list_a[-1] +1)]
list_b_final = [list_b[0] + (list_b[-1]-list_b[0])/(len(list_a_final) -1) * i for i in range(len(list_a_final))]

输出

list_b_final = [34.5, 35.41016949152542, 36.320338983050846, 37.23050847457627, 38.140677966101
7, 39.05084745762712, 39.961016949152544, 40.87118644067797, 41.78135593220339,
42.69152542372881, 43.60169491525424, 44.511864406779665, 45.42203389830509, 46.
33220338983051, 47.242372881355934, 48.152542372881356, 49.06271186440678, 49.97
28813559322, 50.883050847457625, 51.79322033898305, 52.70338983050848, 53.613559
3220339, 54.52372881355932, 55.433898305084746, 56.344067796610176, 57.254237288
1356, 58.16440677966102, 59.074576271186444, 59.98474576271187, 60.8949152542372
9, 61.80508474576271, 62.715254237288136, 63.62542372881356, 64.53559322033898,
65.4457627118644, 66.35593220338984, 67.26610169491525, 68.17627118644069, 69.08
64406779661, 69.99661016949153, 70.90677966101696, 71.81694915254238, 72.7271186
440678, 73.63728813559322, 74.54745762711865, 75.45762711864407, 76.367796610169
49, 77.27796610169491, 78.18813559322035, 79.09830508474576, 80.0084745762712, 8
0.9186440677966, 81.82881355932204, 82.73898305084745, 83.64915254237289, 84.559
32203389831, 85.46949152542373, 86.37966101694916, 87.28983050847458, 88.2]

如您所见,两个中间值略微错过,因为插值是从起始值和结束值&gt;完成的。如果您需要更精确的东西,请查看曲线拟合。

答案 2 :(得分:-1)

第一部分很简单:

list_aa = range(list_a [0],list_a [len(list_a)-1])

对于第二部分,您需要插入并采样与新list_aa中相同数量的点,例如像这样:numpy.interp(list_aa,list_a,list_b)