Как выполнить цикл более 300 точек данных по списку индексов данных в Python? - PullRequest
0 голосов
/ 24 января 2019

У меня более 12 000 секундных точек данных и я создал цикл, который не так хорош в просмотре с интервалом в 300 секунд, и вместо этого мне нужно использовать индексы в моем цикле; Как я могу сделать это, чтобы я мог извлечь информацию о первом интервале 300 с, а второй позже, когда мне это нужно; и как я могу исправить свой существующий код, чтобы сделать это?

init_list = [] # initial values for chunks 
median_list = [] # list of median values for 300 s intervals 
holding_list = [] # hold values up till what you tell it to
pos_count = 0 # 0 = position 1 for python
for i in range(len(flux_maxij)): 
    holding_list.append(flux_maxij[i]) # append means add on to 
    if pos_count == 0: # '==' means IF it is this value
        init_list.append(i) 
    if pos_count == 299: # 299 = 300 which is the 'end' of the range 
        holding_list.sort() #make it pretty 
        median_list.append(holding_list[149]) # half of 300 is 150,                149 for python
        holding_list = [] 
        pos_count = -1 # -1+1 = o, position 1 when it loops back 

    pos_count += 1

x = np.array([init_list]) # makes arrays for x and y to graph it 
y = np.array([median_list])

plt.plot(x,y, 's')      

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Почему бы просто не разделить ваш список на 300 сегментов равного размера с помощью:

interval = 300
divided_list = [flux_maxij[i:i+interval] for i in range(0, len(flux_maxij), interval)]

, вы можете увидеть, как диапазон принимает три аргумента: range(init_value, end_value, step_size) Затем выведите (или сохраните) нужные значения для каждого интервала:

x = np.array(range(0, len(flux_maxij), interval))
y = np.array([np.median(j) for j in divided_list])
plt.plot(x, y, 's')

Однострочник становится:

plt.plot(np.array(range(0, len(flux_maxij), interval)), 
         np.array([np.median(j) for j in [flux_maxij[i:i+interval] for i in range(0, len(flux_maxij), interval)]]),
         's')
0 голосов
/ 24 января 2019

Кажется, вы можете получить доступ к индексам в flux_maxij.Итак, предположительно, вы также можете получить доступ к слайсам?

Вы можете получить доступ к первым 300 элементам с помощью

flux_maxij[0:300]
# OR
start = 0
flux_maxij[start:start+300]

И init_list, кажется, содержит [0, 300, 600, ...]

init_list = list(range(0, len(flux_maxij), 300))  # range from 0 to the total length, jumping 300 each time
median_list = []
for i in init_list:
    holding = sorted(flux_maxij[i:i+300])  # get the next bit of the list and sort it
    median_list.append(holding[149])  # append the median

x = np.array([init_list])
y = np.array([median_list])

plt.plot(x, y, 's')

Это работает?Трудно понять, не зная, что такое flux_maxij.

...