Wie kann ich dies in numpy pythonisch machen?


18.04.2024, 11:03

Sehe gerade: es geht mit transponieren

all2.T[:,:] = data

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Versuch es doch mal mit dem "buffer"-Parameter im ndarray-Konstruktor.

https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html#numpy.ndarray

Ob es funktioniert lässt sich aufgrund der unzureichenden Dokumentation des numpy-APIs nicht vorab sagen.

Ansonsten gibt es auch noch "put":

https://numpy.org/doc/stable/reference/generated/numpy.ndarray.put.html#numpy.ndarray.put

Für genaueres siehe auch:

https://numpy.org/doc/stable/reference/arrays.ndarray.html

isohypse 
Fragesteller
 18.04.2024, 10:38
Versuch es doch mal mit dem "buffer"-Parameter im ndarray-Konstruktor.

ich denke dass dies sehr low-level wäre.

das andere muss ich anschauen.

0
Destranix  18.04.2024, 10:40
@isohypse

Was ist daran "low-level"? Das Parameter dürfte genau dafür da sein.

Etwas anderes wäre es, wenn du das interne Attribut manipulieren würdest, aber selbst das kann vorgesehen sein.

1
isohypse 
Fragesteller
 18.04.2024, 10:43
@Destranix

ich denke da müsste es eine art list comprehension mit elegantem slicing geben.

0
Destranix  18.04.2024, 10:44
@isohypse

Was wahrscheinlich arschlahm ist. Aber gut, du verwendest sowieso Python, von daher...

Aber es steht da, dass der ndarray intern ein 1d-Array ist, insofern sehe ich wirklich nicht, wieso man das komplizierter machen sollte (sofern denn dein 1d-Array im Speicher passend abgelegt ist).

1
isohypse 
Fragesteller
 18.04.2024, 11:07
@Destranix

Ich habe herausgefunden, wie es geht. Ob das die performanteste Variante ist, weiß ich nicht, aber mein originales Datenarray ist in Millisekunden geschrieben. Ich weiß, dass es auch mit deiner Idee gehen könnte, nur will mich nicht in die innersten Eingeweiden von numpy hineinarbeiten, da ich auch was anderes zu tun habe.

0
Destranix  18.04.2024, 12:01
@isohypse

Hm, das könnte schief gehen, das interagiert nur mit einer View auf den Array. Musst du schauen, ob es dann den richtigen Array auch updated.

(Lies mal all2.data vorher und nachher aus und schau, ob sich das ändert).

1
isohypse 
Fragesteller
 18.04.2024, 12:11
@Destranix

Ich könnte das 3d array auch gleich so erzeugen:

all2 = np.tile(data, (10,10,1)).T

Das ergibt das selbe.

Bei 500MByte Daten dauert das unmerkbar lange (~ms)

0