2016-12-08 4 views
0

Ich habe folgendes Problem. In meinem Code habe ich Arrays der Größe L. Die Einträge sind entweder 0 oder 1 für alle Arrays. Stellen wir L = 3 für ein Beispiel ein. Drei mögliche Anordnungen sind (1,1,1), (1,0,0) und (0,1,1). Jetzt möchte ich wissen, wie viele einzelne Frequenzweichen mit (1,0,0) und (0,1,1) zu (1,1,1) bilden können. Die Antwort wäre eins. Für (1,0,1) und (0,1,0) zu (1,1,1) wäre die Antwort 0, weil ich zwei Übergänge benötigen würde. Ich bin auf der Suche nach einem Algorithmus, der dies für allgemeine L tut. (L ist normalerweise nicht größer als 9). Bis jetzt habe ich keine Ahnung und deswegen habe ich ihr dieses Problem bekannt gegeben, aber ich werde einen Schnitt machen, wenn ich einen bekomme. Hoffe ihr könnt mir helfen :)Zählmöglichkeiten für einzelne Frequenzweichen

Edit: Das Ergebnis natürlich nicht nur 0 oder 1, sondern auch größer als 1 Beispiel: (1,1,0,0) und (0,0,0,0)-(0,0,0,0) bilden das Ergebnis nur 2. (Ich kann würde nehmen der letzte Eintrag des ersten Arrays oder die letzten 2 Einträge des ersten Arrays)

Edit 2: Mit single crossover meine ich, dass ich die linke/rechte Seite der ersten Sequenz und die rechte/linke Seite nehmen kann die zweite Sequenz, um die gegebene dritte Sequenz zu bilden. >0,0) + (0,0, oder 0) + (0,0,0,

Antwort

2

Eine andere Art der Interpretation ist das Problem, wie die Berechnung der Hamming Distance ist - (1,1,0,0) und (0,0,0,0)(0,0,0,0) zu bilden. Hier ist ein Ausschnitt, um ein Wörterbuch aller Paare jeder Hamming Distanz/Frequenzweichen zu erstellen.

from itertools import combinations 

tuples = [(0, 0, 1), (1, 0, 0), (1, 0, 1)] 
crossovers = {k: [] for k in range(len(tuples[0]))} 
for a, b in combinations(tuples, r=2): 
    num_crossovers = sum(el1 != el2 for el1, el2 in zip(a, b)) 
    crossovers[num_crossovers].append((a, b)) 

Nach Crossovers Ausführung wird als

{0: [], 
1: [((0, 0, 1), (1, 0, 1)), ((1, 0, 0), (1, 0, 1))], 
2: [((0, 0, 1), (1, 0, 0))]} 

EDIT folgt:

ich verpasst, dass Sie numpy Arrays anstelle von Tupeln verwendet haben, Sie

arrays = np.array([[0, 0, 1], [1, 0, 0], [1, 0, 1]]) 
crossovers = {k: [] for k in range(arrays[0].size)} 
for a, b in combinations(arrays, r=2): 
    num_crossovers = sum(np.abs(a - b)) 
    crossovers[num_crossovers].append((a, b)) 
+0

tun könnte Okay, ich verstehe, was du dort gemacht hast, aber an diesem Punkt sehe ich nicht wie ich Kann mir das helfen? Hamming-Distanz ist auch nicht dasselbe wie Crossover. Ein einzelner Crossover bedeutet, dass ich den linken/rechten Teil der ersten Sequenz und den rechten/linken Teil der zweiten Sequenz nehme und das Ergebnis eine gegebene dritte Sequenz sein wird. – HighwayJohn

+0

Ich sehe, ich habe nicht verstanden, was Sie mit Crossover gemeint haben, obwohl es wie Hamming Entfernung von den Beispielen klang. –