Я недавно «научил» себя python, чтобы проанализировать данные для моих экспериментов. Как таковой я довольно невежественный по многим аспектам. Мне удалось сделать мой анализ работой для определенных файлов, но в некоторых случаях он ломается, и я думаю, что это результат ошибочного программирования.Как вычислить Delta F/F с помощью python?
В настоящее время я экспортирую файл, содержащий 3 массива numpy. Одним из этих массивов является мой сигнал (значения плавающего значения от -10 до 10). То, что я хочу сделать, - это нормализовать каждую дату в этом массиве до ряда значений, которые предшествуют этому. (т. е. значение 30001st должно иметь среднее значение из предшествующих 3000 значений, вычитаемых из него, а затем разность должна быть разделена на такое же среднее значение (предшествующие 3000 значений). Мои данные собираются со скоростью 100 Гц, чтобы получить нормализацию из ALST 30-х лет я должен использовать предшествующее 3000values
как стоять это, как я сумел заставить его работать:.
это сохраняет сигнал в переменный фотосигнал
photosignal = np.array(seg.analogsignals[0], ndmin=1)
теперь эта часть, которую я использую для получения дельта F/F над движущимся окном 30s
normalizedphotosignal = [(uu-(np.mean(photosignal[uu-3000:uu])))/abs(np.mean(photosignal[uu-3000:uu])) for uu in photosignal[3000:]]
Ниже добавляет 3000 значений в начале, чтобы сохранить массив со ту же длину, так как позже я должен времени запереть его в другой список, который является тем же самым длина
holder =list(range(3000))
normalizedphotosignal = holder + normalizedphotosignal
то, что я заметил, что в некоторых файлах этот код дает мне ошибку, потому что он говорит, что «срез» пуст, и поэтому он не может создать среднее.
Я думаю, может быть, есть лучший способ запрограммировать это, чтобы вообще избежать этой проблемы. Или это правильный способ подойти к этой проблеме?
Итак, я попробовал решение, но он довольно медленный, и тем не менее он все равно дает мне «ошибку в пустом месте». Подхожу скользящий среднего пост и нашел этот метод:
def running_mean(x, N):
cumsum = np.cumsum(np.insert(x, 0, 0))
return (cumsum[N:] - cumsum[:-N])/N
однако у меня возникают проблемы, вмещающий его на мой желаемый результат. а именно (средний уровень шума)/средний пробег
спасибо alot попробует его вместе со скользящими средними методами numpy, которые вы упомянули! –
Где вы используете 'i'? Вы имели в виду использовать 'i-3000: i'? –
@DavidCullen: Ты прав. Я забыл исправить ошибку, которую я решил исправить ... –