Fragen zum vorgegeben CPU code

charfi90
Mausschubser
Mausschubser
Beiträge: 61
Registriert: 8. Sep 2010 15:40

Fragen zum vorgegeben CPU code

Beitrag von charfi90 » 23. Jan 2012 16:19

Hallo,

ich habe zwei Fragen:

- Was macht dieser code ? berechnet es Pij(x,y) ? wie ? Was liefert sequences.getData(seq,i) zurück ? Werden Charachter als index benutzt ?

//iterate through all sequences and compute two-point occurrences
for (int seq = 0; seq < numSequences; seq++)
twoPointOccs[sequences.getData(seq, i)][sequences.getData(seq, j)]++;

- Wie sind die Daten in den arrays onePointProbs und data gespeichert (in SequenceSet) ? Zeilen oder Spalten basiert ?

viele Grüße

mw1039
Computerversteher
Computerversteher
Beiträge: 346
Registriert: 12. Apr 2011 12:18

Re: Fragen zum vorgegeben CPU code

Beitrag von mw1039 » 23. Jan 2012 17:31

charfi90 hat geschrieben:- Was macht dieser code ? berechnet es Pij(x,y) ?
Ja. Aber fuer alle i und fuer alle j, deswegen iterieren die Schleifen darum ueber alle i und j.
charfi90 hat geschrieben:wie ?
Zunaechst wird ueber alle Zeilen der beiden betrachteten Spalten i und j iteriert (for(int seq=......)). In twoPointOccs wird dann die Anzahl, wie oft man in i und j die Buchstabenkombination x,y findet, aufinkrementiert. Es werden also keine float Wahrscheinlichkeiten sondern int Haeufigkeiten berechnet. Nachdem ueber alle Zeilen iteriert wurde, wird ueber alle Eintraege von twoPointOccs iteriert. Das entspricht dann der Doppelsumme in der MI-Formel. Jeder Eintrag von twoPointOccs wird immer durch die Sequenzzahl geteilt (dadurch wird aus der Haeufigkeit eine relative Haeufigkeit / Wahrscheinlichkeit) und in die MI-Formel eingesetzt. Das wird dann jeweils auf MI_ij aufsummiert und am Ende an der Stelle (i,j) in die Ergebnismatrix eingetragen.
charfi90 hat geschrieben:Was liefert sequences.getData(seq,i) zurück ?
Den Buchstaben in der Spalte i und der Zeile seq.
charfi90 hat geschrieben:Wie sind die Daten in den arrays onePointProbs und data gespeichert (in SequenceSet) ? Zeilen oder Spalten basiert ?
Spaltenbasiert, weil einen eigentlich immer nur Spalten interessieren.
In onePointProbs steht p_0(A), p_0(C), p_0(D), ..., p_0(-), p_1(A), ..., p_1(-), p_2(A), ...
In data steht (wenn man jetzt mal von dem ganz kurzen Beispielalignment aus der Aufgabenstellung ausgeht) L, L, L, M, M, L, L, L, S, E, E, K, A, A, C, A, ...

arne.lottmann
Mausschubser
Mausschubser
Beiträge: 99
Registriert: 4. Okt 2010 16:25

Re: Fragen zum vorgegeben CPU code

Beitrag von arne.lottmann » 25. Jan 2012 11:24

Warum läuft die innere Schleife in MIcomputation.cpp#computeMIonCPU von i=0 bis i<=j? Würde man so bei der Bestimmung der twoPointOccs nicht zumindest einmal die j-te Spalte als "zwei" Spalten interpretieren (wenn i == j) und damit das Ergebnis minimal verfälschen?
Zumindest bezeichnet meinem Verständnis nach eine "Kombination aus zwei Spalten" eine Kombination aus zwei verschiedenen Spalten…

mw1039
Computerversteher
Computerversteher
Beiträge: 346
Registriert: 12. Apr 2011 12:18

Re: Fragen zum vorgegeben CPU code

Beitrag von mw1039 » 25. Jan 2012 11:42

Durch das i<=j wird erwungen, dass nur die untere Dreiecksmatrix der MI-Matrix berechnet wird, weil das obere Dreieck zum unteren identisch ist.
Dass man die Hauptdiagonale (i==j) mitberechnet ist nicht schlimm, bzw. sogar erwuenscht. Wenn i==j ist, wird die MI-Formel zu \(\text{MI}_{i,i}=\sum\limits_x p_{i,i}(x,x)\log_2\frac{p_{i,i}(x,x)}{p_i(x)\cdot p_i(x)}=\sum\limits_x p_i(x)\log_2\frac{p_i(x)}{p_i(x)\cdot p_i(x)}=-\sum\limits_x p_i(x)\log_2 p_i(x)\), was der normalen Ein-Punkt-Entropie der Spalte i entspricht. Die soll auch berechnet werden.

LarsSchulte
Erstie
Erstie
Beiträge: 15
Registriert: 29. Sep 2009 16:13

Re: Fragen zum vorgegeben CPU code

Beitrag von LarsSchulte » 28. Jan 2012 09:49

Noch eine Frage zum vorgegebenen Code:

Ich gehe zur Zeit davon aus dass numSequences, beinhaltet wie viele mögliche Buchstaben es gibt - also 22 in unserem Fall.
Desweiteren dass SequenceLength die Länge einer Sequence bestimmt. Also 1010 in dem Fall.
Stimmt das so weit?

Wenn dem so ist verstehe ich nämlich nicht, warum für .getData() numSequences als Pitch übergeben wird, denn meinem Verständniss nach müsste es doch SequencesLength sein um in die entsprechende Reihe zu kommen.

mw1039
Computerversteher
Computerversteher
Beiträge: 346
Registriert: 12. Apr 2011 12:18

Re: Fragen zum vorgegeben CPU code

Beitrag von mw1039 » 28. Jan 2012 12:06

numChars ist die Zahl der moeglichen Buchstaben (22). numSequences ist die Zahl der Sequenzen des Eingabefiles. Also z.B. 42 oder Vierzigtausendirgendwas.

Es wird numSequences als pitch uebergeben, weil die Sequenzen spaltenweise abgespeichert sind:
mw1039 hat geschrieben:charfi90 hat geschrieben:
Wie sind die Daten in den arrays onePointProbs und data gespeichert (in SequenceSet) ? Zeilen oder Spalten basiert ?

Spaltenbasiert, weil einen eigentlich immer nur Spalten interessieren.
In onePointProbs steht p_0(A), p_0(C), p_0(D), ..., p_0(-), p_1(A), ..., p_1(-), p_2(A), ...
In data steht (wenn man jetzt mal von dem ganz kurzen Beispielalignment aus der Aufgabenstellung ausgeht) L, L, L, M, M, L, L, L, S, E, E, K, A, A, C, A, ...
Spaltenbasiert entspricht nicht ganz der ueblichen Darstellungsweise, macht hier aber mehr Sinn.

Antworten

Zurück zu „Archiv“