Я нашел похожие вопросы, опубликованные здесь, но ни один из них не относится к определенным строкам временных рядов. Я ожидаю, что решение может быть найдено через NumPy или Scipi. Поскольку у меня так много данных, я бы предпочел не использовать рамки данных панд.
У меня много прогонов 19-канальных данных ЭЭГ, хранящихся в двумерных массивах. Я прошел и пометил зашумленные данные как nan, поэтому данный прогон может выглядеть примерно так:
C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 C16 C17 C18 C19
nan 7 5 4 nan nan 7 9 0 -3 nan 2 nan nan 5 7 6 nan 8
0 6 7 3 5 9 2 2 4 6 8 7 5 6 4 -1 nan -8 -9
6 8 7 7 0 3 2 4 5 1 3 7 3 8 4 6 9 0 0
...
nan nan nan 3 5 -1 0 nan nan nan 1 2 0 -1 -2 nan nan nan nan
(без меток канала)
Каждый прогон содержит от 80 000 до 120 000 строк (циклов) длинный.
Для каждого из этих прогонов я хочу создать новый стек смежных непересекающихся эпох, где никакие значения не подвергались артефактам для nan. Примерно так:
def generate_contigs(run, length):
contigs = np.ndarray(three-dimensional array of arbitrary depth x 19 x length)
count = 0
for row in run:
if nan not in row:
count+=1
if count==length:
stack array of last (length) rows on contigs ndarray
count = 0
else:
count = 0
return(contigs)
Скажем, например, что я указал длину 4 (произвольно малую) и что моя функция нашла 9 непересекающихся контигов, где значение для 4 прямых строк не было nan.
Мой вывод должен выглядеть примерно так:
contigs = [
[19x4 array],
[19x4 array],
[19x4 array],
[19x4 array],
[19x4 array],
[19x4 array],
[19x4 array],
[19x4 array],
[19x4 array]
]
Где каждый элемент в стеке вывода похож на следующее:
[4 6 5 8 3 5 4 1 8 8 7 5 6 4 3 5 6 6 5]
[5 5 7 2 2 9 8 7 7 8 3 0 7 4 4 6 3 7 3]
[4 4 6 7 9 0 9 9 8 8 7 7 6 6 5 5 4 4 3]
[1 2 3 4 5 4 3 6 5 4 3 7 6 5 8 7 6 9 8]
Где 4 строки, содержащиеся в этом элементе, были найдены непрерывнов массиве данных исходного прогона.
Я чувствую, что здесь довольно близко, но я борюсь с операциями со строками и минимизирую итерации. Бонусные баллы, если вы можете найти способ прикрепить индексы начала / конца строки в качестве кортежа для последующего анализа.