Array in Array platzieren
Verfasst: Donnerstag 3. September 2020, 16:04
Guten Tag zusammen,
ich habe eine Menge an Koordinaten vorliegen, deren Format ich beeinflussen kann. Also wahlweise:
Dann habe ich ein großes Array (konkrete Größe variabel von Fall zu Fall):
und ein weiteres Array beliebiger Form (in der Regel jedoch ein Kreis), beispielsweise:
Wie kann ich nun schnell an den Stellen im Array `welt`, welche in den Koordinaten beschrieben werden, das Array `form` mittig einfügen und auf die bereits vorhandenen Werte addieren?
Da mir nichts besseres einfiel, ist der bisherige Ansatz die Koordinaten in einer Schleife zu durchlaufen und dann per Slicing den Bereich der Form zu nehmen und darauf die Form zu addieren. Das sieht dann so aus:
Da es sich um ein paar mehr Koordinaten handelt (mindestens ~100.000) würde ich das ganze gern möglichst schnell verarbeiten und suche nach einer klugen Numpy-Funktion dafür. Je nachdem wie schnell das ganze geht, würden es nämlich mehr Punkte werden. Momentan läuft das Programm mit numba beschleunigt und braucht ca. 5,4 s für 129.600 Punkte mit einer `welt` mit Shape (512, 512) und einer `form` mit Shape (61, 61).
Weiß jemand Rat?
ich habe eine Menge an Koordinaten vorliegen, deren Format ich beeinflussen kann. Also wahlweise:
Code: Alles auswählen
koordinaten = np.array([[x1, y1], [x2, y2], ... [xn, yn]])
# oder
x = np.array([x1, x2, ... xn])
y = np.array([y1, y2, ... yn])
Code: Alles auswählen
welt = np.zeros((2000, 2000))
Code: Alles auswählen
form = np.array([0, 1, 0], [1, 1, 1], [0, 1, 0])
Da mir nichts besseres einfiel, ist der bisherige Ansatz die Koordinaten in einer Schleife zu durchlaufen und dann per Slicing den Bereich der Form zu nehmen und darauf die Form zu addieren. Das sieht dann so aus:
Code: Alles auswählen
for koordinate in koordinaten:
welt[koordinate[0] - form.shape[0] : koordinate[0] + form.shape[0] + 1, koordinate[1] - form.shape[1] : koordinate[1] + form.shape[1] + 1] += form
Weiß jemand Rat?