Ich habe ein Problem zu lösen und ich kann keine gute Lösung finden.Python-Nummernfelder. Wie schneidet man mehrere Arrays auf effiziente Weise ab?
Um es zu erleichtern habe ich ein Array von 10x10 und ich möchte "kleine Arrays" von 3x3 herausschneiden. Im Moment kann ich dies folgendermaßen:
array = np.arange(100).reshape((10,10))
patch = np.array(array[:3, :3]
for n in range(3, 10, 3):
for m in range(3, 10, 3):
patch = numpy.append(patch, array[n:n+3, m:m+3]
i im Grunde die numpy Array-Patch mit der ersten Scheibe erstellen und fügen Sie alle anderen Scheiben danach. Das Problem dabei ist, dass es fürchterlich langsam ist und die Sloping-Möglichkeiten von numpy nicht gut nutzt. Ich muss dies für eine große Anzahl viel größerer Arrays tun. Kann mir jemand einen Rat geben, wie man das effizienter macht? 1000 danke!
warum append 'patch'? Wenn patch ein Slice ist, dh "patch = array [n: n + 3, m: m + 3]", werden alle auf "patch" geänderten Werte auf "array" geändert. Wenn es ein Speicherproblem ist, würde ich vorschlagen, in [dask] (http://dask.pydata.org/en/latest/) –
hi und danke für Ihre Antwort. Was ich am Ende haben möchte, ist ein Array (Patch), das alle 3 × 3 Slices enthält, die auf dem großen Array-Array möglich sind. Ich mache dies auf die hässliche Art und Weise, das Array mit einem Eintrag (Slice 1) zu erstellen, um die richtigen Dimensionen zu erhalten (ich verwende in meiner Arbeit mehrdimensionale Arrays) und hänge danach alle anderen Slices an. sagst du in der Art, wie ich es tue, ändere ich auch Array? Ich will das nicht tun, Array sollte unabhängig von Patch sein – idontknow
Ich sehe immer noch nicht ganz, warum Sie das Array in Patches aufteilen wollen, oder warum es ein Problem ist, dass Patch ändert diesen Teil des Arrays. Wenn Sie append verwenden, ohne die Achse zu setzen, drehen Sie Ihr 2D-Array in 1d, glaube ich. Könnten Sie versuchen, anhand eines einfachen Beispiels zu zeigen, was Sie tun möchten? –