Hallo,
ich möchte gerade den Luftbedarf für eine Verbrennung ermitteln. Und dazu muss ich auf einzelne Komponenten meines Gasgemisches zugreifen können.
Mein Erdgas besteht aus ca 88% Methan, 7% Ethan usw. und wird in Python mit Hife von Cantera so %anteilig definiert:
gasH.Y = { 'CH4':0.8866, 'C2H6':0.0685,'C3H8':0.0101, \
'CO2':0.0101, 'O2':0.0001, 'N2':0.0133}
Jetzt möchte ich die 0,8866 mit 2 multiplizieren um den Sauerstoffbedarf für Methan zu rechnen.
O2_Bedarf = 2 * 0,8866 = 1,77. Das funktioniert natürlich.
Wie kann ich das automatisch mit Bezug auf den ersten Eintrag von gasH programmieren ? Ich habe nach einen Befehl gesucht aber keinen gefunden.
Ich würde gerne so etwas haben .
O2_Bedarf = gasH(1_1) * 2 + gasH(1_2) * 3,5 + gasH(1_3) *5
gasH(1_1) sollte den Wert 0,8866 haben.
gasH(1_2) sollte dann den Wert 0,0685 haben.
gasH(1_3) sollte dann den Wert 0,0101 haben.
Welche Befehle kann man da nehmen ?
Gruß
Adrian
Wert aus einer Menge benutzen
gasH.Y ist ein Dictionary, man erhält die Werte über den Schlüssel:
o2_bedarf = gasH.Y['CH4'] * 2 + gasH.Y['C2H6'] * 3.5 + gasH.Y['C3H8'] * 5
o2_bedarf = gasH.Y['CH4'] * 2 + gasH.Y['C2H6'] * 3.5 + gasH.Y['C3H8'] * 5
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Danke für die schnelle Antwort.
Leider kommt da ein Syntaxfehler ...
o2_bedarf = gasH.Y['CH4'] * 2 + gasH.Y['C2H6'] * 3.5 + gasH.Y['C3H8'] * 5
IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices
auch bei der Abfrage kommt da eine Syntaxmeldung:
print (gasH.Y['CH4'])
IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices
und bei runden Klammern...
print (gasH.Y('CH4'))
TypeError: 'numpy.ndarray' object is not callable
Leider kommt da ein Syntaxfehler ...
o2_bedarf = gasH.Y['CH4'] * 2 + gasH.Y['C2H6'] * 3.5 + gasH.Y['C3H8'] * 5
IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices
auch bei der Abfrage kommt da eine Syntaxmeldung:
print (gasH.Y['CH4'])
IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices
und bei runden Klammern...
print (gasH.Y('CH4'))
TypeError: 'numpy.ndarray' object is not callable
Das ist kein SyntaxFehler. Das ist ein IndexError. Und das ist nicht Korinthenkackerei, sondern wichtig sowas zu unterscheiden. Das eine sagt 'der Interpreter hat keine Ahnung was du von ihm willst. Das andere sagt, dass du einen Fehler in der Angabe des Index machst.
Und einfach Klammern durchzuraten ist auch nicht wirklich hilfreich.
Laut Fehlermeldung versuchst du mit einem String ( zb 'CH4') auf ein numpy.array zuzugreifen, das aber nur Zahlen, Bereiche oder andere Arrays zulaesst. Was ja auch Sinn macht, es ist ja eine Tabelle.
Was genau ist das fuer eine Bibliothek? Und was ist die Ausgabe von
nachdem du die wie von dir oben gezeigt mit deinem Gasgemisch-Woerterbuch gefuettert hast?
Und einfach Klammern durchzuraten ist auch nicht wirklich hilfreich.
Laut Fehlermeldung versuchst du mit einem String ( zb 'CH4') auf ein numpy.array zuzugreifen, das aber nur Zahlen, Bereiche oder andere Arrays zulaesst. Was ja auch Sinn macht, es ist ja eine Tabelle.
Was genau ist das fuer eine Bibliothek? Und was ist die Ausgabe von
Code: Alles auswählen
print(gasH.Y)
Das ist eine Bibliothek wo mein Gas als eine "Solution" gespeichert wird.
print (gasH.Y)
[0.00000000e+00 0.00000000e+00 0.00000000e+00 1.01142915e-04
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 8.96733084e-01 0.00000000e+00 1.02154344e-02
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 6.92828967e-02 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 1.34520077e-02
0.00000000e+00 0.00000000e+00 1.02154344e-02 0.00000000e+00
0.00000000e+00]
Viele Einträge sind 0, weil Cantera ein Gas nie als 100% rein sieht sondern immer mit kleine Verunreinigengen. Ich habe aber explizit mein Gas definiert und deswegen kommen auch nur 6 Einträge vor die nicht 0 sind.
mit gasH.X werden die (Molanteile) Massenanteile angegeben
mit gasH.Y werden die Voluemnanteile in % angeben.
Das heißt gasH.Y besteht aus 88% Methan, 6,8% Ethan, etc...
print (gasH.Y)
[0.00000000e+00 0.00000000e+00 0.00000000e+00 1.01142915e-04
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 8.96733084e-01 0.00000000e+00 1.02154344e-02
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 6.92828967e-02 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00
0.00000000e+00 0.00000000e+00 0.00000000e+00 1.34520077e-02
0.00000000e+00 0.00000000e+00 1.02154344e-02 0.00000000e+00
0.00000000e+00]
Viele Einträge sind 0, weil Cantera ein Gas nie als 100% rein sieht sondern immer mit kleine Verunreinigengen. Ich habe aber explizit mein Gas definiert und deswegen kommen auch nur 6 Einträge vor die nicht 0 sind.
mit gasH.X werden die (Molanteile) Massenanteile angegeben
mit gasH.Y werden die Voluemnanteile in % angeben.
Das heißt gasH.Y besteht aus 88% Methan, 6,8% Ethan, etc...
- __blackjack__
- User
- Beiträge: 13103
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@adr1an0: Also wenn sich das dermassen komisch verhält, das man dem Attribut `Y` ein Wörterbuch zuweist, dann aber danach beim Zugriff ein Numpy-Array erhält, kann man Deine Fragen nicht ohne Kenntnisse/Dokumentation zu der tatsächlich verwendeten Bibliothek beantworten. Was Code *bedeutet* hängt letztlich ja nicht von der Syntax ab, sondern was die Syntax im Zusammenspiel mit den verwendeten Datentypen bedeutet. Diese Bedeutung legen die Leute fest, die die Datentypen programmiert haben.
Hier sieht das jetzt also so aus, dass Du von einer Zeichenkette die einer chemischen Strukturformel ähnlich sieht, zu einem Indexwert kommen musst, über den Du dann auf den Volumenanteil zugreifen kannst. Ich vermute mal die Bibliothek wird da irgend etwas anbieten um diesen Weg zu ermöglichen, aber das musst Du schon selbst wissen/heraus finden, oder mindestens mal verraten wo man die Dokumentation finden kann und was `gasH` für ein Datentyp ist.
Hier sieht das jetzt also so aus, dass Du von einer Zeichenkette die einer chemischen Strukturformel ähnlich sieht, zu einem Indexwert kommen musst, über den Du dann auf den Volumenanteil zugreifen kannst. Ich vermute mal die Bibliothek wird da irgend etwas anbieten um diesen Weg zu ermöglichen, aber das musst Du schon selbst wissen/heraus finden, oder mindestens mal verraten wo man die Dokumentation finden kann und was `gasH` für ein Datentyp ist.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Ich finde die Bibliothek etwas verwirrend. Das mag aber am fehlenden Domaenen-Wissen liegen. Laut https://cantera.org/tutorials/python-tutorial.html koennte es sein, dass der Zugriff direkt ueber das Gas erfolgt:
So zumindest lese ich das. Und hier https://cantera.org/documentation/docs- ... ction_dict steht, dass es Methoden
mass_fraction_dict
und
mole_fraction_dict
gibt, welche dir wieder das Dictionary zurueck geben:
Code: Alles auswählen
gasH['CH4'].Y
mass_fraction_dict
und
mole_fraction_dict
gibt, welche dir wieder das Dictionary zurueck geben:
Code: Alles auswählen
gas1.mole_fraction_dict()['CH4']
Ich habe mich wirklich durch die Cantera Documentatin durchgelesen, aber es ist sehr umfassend, und ich finde mich da echt nicht zurecht.
@__deets__ danke danke danke... beide "Befehle" sind richtig und ich komme damit weiter... vielen vielen Dank..
gas['CH4'].X
Out[8]: array([0.8239])
gas.mole_fraction_dict()['CH4']
Out[9]: 0.8239
Gruß
Adrian
@__deets__ danke danke danke... beide "Befehle" sind richtig und ich komme damit weiter... vielen vielen Dank..
gas['CH4'].X
Out[8]: array([0.8239])
gas.mole_fraction_dict()['CH4']
Out[9]: 0.8239
Gruß
Adrian
Nach einem schnellen Blick scheint mir Cantera eine Bibliothek zur Kinetik chemischer Reaktionen zu sein. Deine Frage aber betrifft die Stöchiometrie. Und die Zusammensetzung des Gasgemisches kennst Du bereits (der Input als dict an Cantera). Was Du jetzt ausliest ist nichts anderes als der Input.