Python3.x: объединить элементы в один и тот же индекс в цикле for? - PullRequest
0 голосов
/ 18 октября 2019

У меня есть набор данных, который я пытаюсь соединить вместе. У меня есть my_y значения, которые состоят из нескольких списков.

 In [0]: my_y
 Out[0]: [array([0.1,1,2,5,7,8,10,20,40,35,20,10]),array([0,1.5,2.3,5.6,7.8,8,12,23,44,35,20,8]),array([0.5,1.5,1.8,5.2,6.5,8,10,15,30,35,22,7]),array([-0.1,1,3,7,9,8,13,25,38,21,18,10]),array([0.3,1,2.1,5,7.5,8,10,25,45,37,24,13])] 

У меня также есть некоторые значения, рассчитанные по my_y.

In [0]: Math_output1
Out[0]: [array(20),array(15),array(20),array(15)]

In [0]: Math_output2
Out[0]: [array(22),array(17),array(23),array(18)]

In [0]: Math_output3
Out[0]: [array(25),array(27),array(33),array(24)]

Каждый математический вывод соответствует данным в my_y на основании их индекса. Например, значения, которые соответствуют my_y [0]: Math_output1 [0], Math_output2 [0] и Math_output3 [0].

Аналогично, my_y [1] составляют Math_output1 [1], Math_output2 [1] и Math_output3 [1].

Я хочу построить my_y как функцию my_x (фиксированные значения) и добавить штриховые линии в значения x, соответствующие Math_output1, Math_output2 и Math_output3.

Я попытался сделать это в цикле for, но понял, что не могу правильно сопоставить my_y и Math_output s.

for k in range(len(my_y)):
    for a in range(len(Math_output1)):
       print('i:', i)
       print('a:',a)
       plt.plot(my_x,my_y[k])
       plt.axvline(x=Math_output1[a], linestyle='--', color='k')
       plt.axvline(x=Math_output2[a], linestyle='--', color='k') 
       plt.axvline(x=Math_output3[a], linestyle='--', color='k') 

Это работает, но неправильно соединяет Math_outputs и my_y. Функции print показывают, почему.

i: 0
0
1
2
i: 1
0
1
2
i: 2
0
1
2

Таким образом, вместо объединения my_y и Math_outputs с одинаковым индексом, приведенный выше код сопоставляет каждый индекс my_y с каждым индексом в Math_output с. В итоге получается график my_y [i] и последний индекс Math_output s, Math_outputs [2].

Любая идея, что я могу сопоставить право my_y вправо Math_output s

1 Ответ

0 голосов
/ 18 октября 2019

Просто, чтобы немного упростить ваш вопрос, я думаю, вы говорите, что у вас есть список списков (или массивов) [[sublist1],[sublist2],[sublist3] и три других списка констант, соответствующих каждому из подсписков [const1, const2, const3] x3. Я не уверен, какой именно желаемый результат, но я думаю, что вы хотите перебрать подсписки и получить соответствующие константы?

Пара вариантов:

# Enumerate your iteration over the data lists
for i, sublist in enumerate(my_y):
    plt.plot(my_x,sublist)
    plt.axvline(x=Math_output1[i], linestyle='--', color='k')
    plt.axvline(x=Math_output2[i], linestyle='--', color='k') 
    plt.axvline(x=Math_output3[i], linestyle='--', color='k') 

# Use zip to combine the relevant information:
data_tuples = zip(my_y, Math_output1, Math_output2, Math_output3)
for sublist, math1, math2, math3, in data_tuples:
    plt.plot(my_x,sublist)
    plt.axvline(x=math1, linestyle='--', color='k')
    plt.axvline(x=math2, linestyle='--', color='k') 
    plt.axvline(x=math3, linestyle='--', color='k') 
...