Seite 1 von 1

gezielt Werte in np-array ändern

Verfasst: Freitag 27. Mai 2022, 21:40
von G-Rizzle
Hi,

Ich möchte aus 17,000,000 Koordinatenpunkten der Form: x1 y1 z1, x2 y2 z2, .... eine reguläre Matrix der Form:

nan---x1-------x2------......
y1-----z11-----z12
y2-----z21-----z22
...

erstellen. Die Koordinaten sind kreuz und quer, es gibt kaum System. Mein Vorgehen war jetzt bisher: Ich extrahiere erstmal alle x, y und z Koordinaten in 3 seperate Vektoren. Danach sortiere ich alle unique x- und y-Koordinaten der Reihe nach. Danach loope ich ein mal über alle einzigartigen x- und y- Werte und setze mithilfe

Code: Alles auswählen

  
for x_index, unique_x in enumerate(unique_x_values_sorted):    
  x_vector[x_vector== unique_x] = x_index     

jeden vektor Wert zu einem zugehörigen Index. Das mache ich auch für y. Abschließend erstelle ich eine leere z-matrix und fülle sie an entsprechenden Stellen:

Code: Alles auswählen

  
z_matrix = np.zeros((len(unique_y_values_sorted), len(unique_x_values_sorted)))

# fill the z-matrx; this method takes 3 vectors and sets the according matrix values (accessed via _y_vector_integered, _x_vector_integered) to the according _z_vector_original-value
z_matrix[y_vector, x_vector] = z_vector

Durch den besagten Schleifendurchlauf ist das ganze furchtbar ineffizient. Gibt es nicht eine Möglichkeit, das ganze über eine np-Funktion etc. besser zu machen?

Grüße

Re: gezielt Werte in np-array ändern

Verfasst: Samstag 28. Mai 2022, 09:37
von Sirius3
np.unique liefert dir doch mit return_inverse das, was Du hier so kompliziert mit Schleife nachbaust.

Re: gezielt Werte in np-array ändern

Verfasst: Samstag 28. Mai 2022, 12:02
von G-Rizzle
hmmm, ne, die schleife ist doch dazu da, die Elemente im 17,000,000 Einträge langen x- bzw. y-vektor von mm Werten gleich dem zugehörigen Index zu setzen

Re: gezielt Werte in np-array ändern

Verfasst: Samstag 28. Mai 2022, 12:18
von Sirius3
Hmmm, ne, doch, return_inverse liefert genau das was du brauchst.

Re: gezielt Werte in np-array ändern

Verfasst: Samstag 28. Mai 2022, 12:56
von G-Rizzle
okay tatsächlich :D danke