Ich schreibe Code, der Numba verwendet, um JIT meinen Python-Code zu kompilieren. Die Funktion nimmt zwei Arrays gleicher Länge als Eingabe auf, wählt zufällig einen Slicing-Punkt und gibt ein Tupel mit zwei Frankenstein-Arrays zurück, die aus Teilen der beiden Eingabe-Strings bestehen. Numba unterstützt jedoch noch nicht die Funktion numpy.concatenate (weiß nicht, ob es jemals funktioniert). Da ich Numpy nicht fallen lassen möchte, weiß jemand eine performante Lösung für die Verkettung zweier Numpy-Arrays ohne die Verkettungsfunktion?Wie zwei numpy ndarrays verketten ohne verketten
def randomSlice(str1, str2):
lenstr = len(str1)
rnd = np.random.randint(1, lenstr)
return (np.concatenate((str1[:rnd], str2[rnd:])), np.concatenate((str2[:rnd], str1[rnd:])))
Funktioniert wie ein Charme. Ich wundere mich nur über den Leistungsaufwand, der durch das Ersetzen von Elementen auf out1 und out2 entsteht, aber im Moment ist genau das, was ich brauchte. Vielen Dank. (Für die Aufzeichnung waren die Str-Eingaben einfach nur 1D ndarrays) –
Wenn Sie 'np.empty' oder' np.empty_like' verwenden, ordnen Sie nur Speicher für das Array zu und füllen es nicht, daher sollte es schnell sein. Die meisten numpy Funktionen, die ein neues Array zurückgeben, müssen etwas Ähnliches tun, obwohl sie oft eine niedrigere C-Funktion wie 'PyArray_ConcatenateArrays' benutzen. Selbst dann können Sie sehen, dass die Funktion Speicher zuweist und dann Daten in sie kopiert. – JoshAdel
Der einzige Weg, um dies zu umgehen, ist, wenn Sie Ausgangsarrays im Voraus zuweisen und sie übergeben, was ich gelegentlich tun werde, wenn ich viele kleine Arrays immer und immer wieder erstellen werde. Es macht den Code jedoch hässlicher. – JoshAdel