Ich habe mir kürzlich selbst Python "beigebracht", um Daten für meine Experimente zu analysieren. Als solcher bin ich in vielen Aspekten ziemlich ahnungslos. Ich habe es geschafft, meine Analyse für bestimmte Dateien zu machen, aber in einigen Fällen bricht es zusammen und ich stelle mir vor, dass es das Ergebnis einer fehlerhaften Programmierung ist.Wie berechnet man Delta F/F mit Python?
Derzeit exportiere ich eine Datei mit 3 numply Arrays. Eines dieser Arrays ist mein Signal (float Werte von -10 bis 10). Was ich tun möchte, ist, jedes Datum in diesem Array auf einen Bereich von Werten zu normieren, die ihm vorausgehen. (dh der 30001ste Wert muss den Durchschnitt der vorhergehenden 3000 Werte subtrahiert haben und dann muss die Differenz durch diesen sehr gleichen Durchschnitt geteilt werden (die vorhergehenden 3000 Werte). Meine Daten werden mit einer Rate von 100 Hz gesammelt, um eine Normalisierung zu erhalten der Alst 30er Jahren muss ich die vorhergehenden 3000values verwenden
wie dies stehen, wie ich es funktioniert haben es geschafft, zu.
dies das Signal in die Variable Fotosignal speichert
photosignal = np.array(seg.analogsignals[0], ndmin=1)
jetzt das ist der Teil, den ich benutze, um zu bekommen die Delta-F/F über einem sich bewegenden Fenster von 30s
normalizedphotosignal = [(uu-(np.mean(photosignal[uu-3000:uu])))/abs(np.mean(photosignal[uu-3000:uu])) for uu in photosignal[3000:]]
Die folgende fügt 3000-Werte an den Anfang, da die gleiche Länge der Anordnung zu halten später es in eine andere Liste Einrastzeit muß, die die gleiche ist, Länge
holder =list(range(3000))
normalizedphotosignal = holder + normalizedphotosignal
Was ich bemerkt habe ist, dass in bestimmten Dateien dieser Code mir einen Fehler gibt, weil er sagt, dass die „Scheibe“ leer ist, und daher kann es nicht mit einem mittleren erstellen.
Ich denke, vielleicht gibt es eine bessere Möglichkeit, dies zu programmieren, die dieses Problem vollständig vermeiden könnte. Oder ist dies ein korrekter Weg, dieses Problem anzugehen?
Also habe ich die Lösung ausprobiert aber es ist ziemlich langsam und es gibt mir trotzdem noch den "leeren Scheibenfehler". Ich ging über die gleitenden Durchschnitt Post und fand diese Methode:
def running_mean(x, N):
cumsum = np.cumsum(np.insert(x, 0, 0))
return (cumsum[N:] - cumsum[:-N])/N
aber ich Probleme habe es zu meinem gewünschten Ausgangsentgegenkommend. nämlich (x-laufender Durchschnitt)/laufender Durchschnitt
vielen Dank wird es zusammen mit den bewegenden Durchschnitt numpy Methoden ausprobieren, die Sie erwähnten! –
Wo benutzt du 'i'? Meinst du "i-3000: i"? –
@DavidCullen: Du hast Recht .. Ich habe vergessen, den Fehler zu beheben, den ich festgelegt habe ... –