2016-04-13 2 views
-1

У меня есть 2 списка:Заполнение 2 списков в Python

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 одинаковы.

Действительно не уверен, как это сделать, кроме как, возможно, применить цикл for.

+1

Вы еще что-нибудь пробовали? – heltonbiker

+2

Что вы имеете в виду, что значения list_b линейно интерполированы? Какова логика? – gidim

+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

Первая часть легко:

list_aa = диапазон (list_a [0], list_a [Len (list_a) -1])

Для второй части вам необходимо интерполировать и образец тот же номер точек, как в новом списке_aa, например как это: numpy.interp (list_aa, list_a, list_b)

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] 

Как вы можете видеть, два средних значения немного пропущены, потому что интерполяция выполняется из начального и конечного значений> Если вам нужно что-то более точное, посмотрите на подгонку кривой.

Смежные вопросы