Ich habe eine Liste von 4 Listen, die den 4 Nukleotiden entsprechen (Liste 0 = A, Liste 1 = C, Liste 2 = G, Liste 3 = T. Jede Liste ist die gleiche Länge (repräsentiert Positionen in einer Sequenz). Die Elemente jeder Liste stellen die Frequenz dieses Nukleotids an dieser Position in der Sequenz über viele Sequenzen einer Datei dar (jede Liste hat die gleiche Länge wie die Sequenz). Hier ist ein Beispiel mit einfach zu arbeite mit Werten (tatsächlich habe ich lange Gleitkommawerte):Python Log2 über Index der Liste der Listen
[[0.0, 1.0, 2.0, 3.0, 4.0, 5.0], [0.1, 1.1, 2.1, 3.1, 4.1, 5.1], [0.2.1.2 2.2, 3.2, 4.2, 5.2], [0.3, 1.3, 2.3, 3.3, 4.3, 5.3]]
So zeigen diese Beispiele oben, dass die Sequenz co enthält 6 Nukleotide und in Position 0 beträgt die Häufigkeit von Nukleotid A 0,0. Die Häufigkeit von Nukleotid G (dargestellt durch die Liste an Position 2) an Position 2 ist 1,2. Ich möchte an jedem Element in einer bestimmten Position für jedes Nukleotid (jede Liste) eine mathematische Funktion ausführen und dann diese Werte summieren für diese Position allein (ICi). Wiederholen Sie dies für jede Position in der Liste und summieren Sie dann alle diese in einen Wert (IC). Unten ist der Code, background ist eine Liste der Länge 4 (Float-Werte), die ich in einer anderen Funktion berechnet habe und die für die mathematische Berechnung benötigt wird.
import math
def function_name(lst, background):
ab, cb, gb, tb = background[0], background[1], background[2], background[3]
a, c, g, t = lst[0][:], lst[1][:], lst[2][:], lst[3][:]
pos = 0
IC = 0
for list in lst:
for i in list:
loga = math.log(((a[pos])/ab), 2)
logc = math.log(((c[pos])/cb), 2)
logg = math.log(((g[pos])/gb), 2)
logt = math.log(((t[pos])/tb), 2)
ICi = (a[pos]*loga + c[pos]*logc + g[pos]*logg + t[pos]*logt)
IC += ICi
return IC
Im Folgenden finden Sie meine Daten für lst und Hintergrund als Testdaten:
lst = [[,011740473738414007, ,005561277033985582, ,5701338825952627, ,5069001029866117, 0,22183316168898043, ,24675592173017508, ,2947476828, 0,27394438722966014, 0,25458290422245106, ,2514933058702369], [,0014418125643666324 , ,02286302780638517, 0,07929969104016478, 0,13511843460350154, ,12461380020597322, 0,16416065911431513, ,17466529351184346, ,20844490216271885, 0,22265705458290422, ,22327497425334705], [0,9802265705458291, 0,003913491246138002, ,13347064881565396, 0,08, 0,43480947476828014, 0,13861997940267765, 0,14150360453141092, ,11987641606591143, 0,1167868 1771369721, ,11328527291452112], [,006591143151390319, ,9676622039134912, ,21709577754891865, ,2778578784757981, 0,21771369721936149, ,4490216271884655, 0,38722966014418125, ,3944387229660144, 0,40205973223480945, ,4074150360453141]]
background = [0,26125394569167243, ,1628634426694565, 0,17949426101679142, ,3891011102722321]
Aus diesen Daten, Ich sollte ein IC von ungefähr 4,74 bekommen, aber stattdessen komme ich um 91 ... Jede Hilfe, die Sie einem eifrigen, jungen Pythonschüler zur Verfügung stellen könnten, wäre wunderbar! Ich lerne immer noch, also versuche ich nicht, Werkzeuge wie numpy zu benutzen, ich muss lernen, wie man den Code mit eingebauten Programmen schreibt (wenn das Sinn macht). Vielen Dank im Voraus für Ihre Hilfe!
Ja! Sie sind ein Geschenk von Computer-Himmel;) Vielen Dank für Ihre Hilfe, ich konnte einfach nicht sehen, wo mein Problem war! – Ouwan12