Bestimmte Werte aus Array löschen

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Hinnerk8
User
Beiträge: 5
Registriert: Mittwoch 27. Januar 2021, 18:05

Hallo liebes Forum,
etwas verzweifelt versuche ich seit einigen Stunden aus einem Array nullen zu löschen. (Ja, ich bin absoluter Python-Anfänger) Folgendes Problem habe ich:
Ich habe einen Vektor erstellt, in dem erst Mal eine Menge nullen stehen. In diesen Vektor möchte ich gerne meine Integrationsergebnisse speichern. Da ich allerdings recht große Intervalle nutze mit 500er Schritten stehen in diesem Vektor am Ende recht viele nullen, die ich gerne löschen möchte. Aber erst mal den Code zum Problem:

Vstrom_H2_ml3_min=zeros(438823, 1)
for i in range(0, 438823, 500):
Integrationsintervall=[H2_MF, H2_MF[i+500]]
Vstrom_H2_ml3_min= np.trapz(Integrationsintervall)
print('Done integrating')



Im Internet habe ich diverse Lösungsvorschläge gefunden. Jedoch hat irgendwie nichts so richtig geklappt. Zunächst habe ich es mit np.tolist() versucht und anschließen remove('0') bzw. remove('[0]' versucht, doch ich bekam immer wieder den Fehler, dass es keine nullen in der Liste gibt.
Über eine if-Bedingung bin ich auch schlecht weitergekommen, weil das Problem der Indizierung im Vektor dann bestehen bleibt.
Die Funktion np.unique schmeißt mir zwar meine nullen raus, aber sortiert meine Werte um und ich kann mir nicht zu hundert Prozent sicher sein, dass kein Wert doppelt ist und aussortiert wurde.
Zu guter letzt habe ich es mit der Funktion np.where versucht, aber irgendwie liefert die mir auch keine Positionen, wenn ich das richtig sehe...

Eigentlich kann das doch echt nicht so schwer sein. Vielleicht hat einer von Euch eine Idee, die mich weiterbringt?

Danke schonmal,
Hinnerk8
Sirius3
User
Beiträge: 17761
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn man for-Schleifen mit numpy-Arrays benutzt macht man etwas falsch.
Warum erzeugst Du überhaupt ein Array mit so vielen Nullen, wenn Du sie gar nicht brauchst? Statt später etwas zu löschen ist es meist einfacher, von Anfang an das richtige zu machen:

Code: Alles auswählen

intervall = H2_MF[::500]
Vstrom_H2_ml3_min = (intervall[:-1] + intervall[1:]) * 0.5
Das was Du da Integration nennst, ist nur eine Mittelwertbildung.
Antworten