Nicht nachvollziehbarer Numpy-Fehler

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
pythonDau
User
Beiträge: 2
Registriert: Mittwoch 21. September 2016, 16:15

Nicht nachvollziehbarer Numpy-Fehler

Beitragvon pythonDau » Mittwoch 21. September 2016, 16:25

Hallo zusammen,

ich möchte mittels numpy einen Formelzusammenhang ermitteln und erhalte dabei den Fehler "TypeError: return arrays must be of ArrayType". Leider bin ich langsam am Verzweifeln, da ich mit dem Fehler nichts anganfen kann und mir Google auch nicht weiterhelfen konnte. Letzlich taucht er in einer Zeile auf, in der ich von 1,4 den Wert 1 subtrahiere.

Für euch habe ich ein Minimalbeispiel erstellt, anhand dessen ihr meine Berechnung nachvollziehen könnt:

  1. _KAPPA = 1.4  
  2. ptRelRatio = 0.95
  3. MachRelIn = 0.8
  4.  
  5. zetaRRel = np.divide(
  6.     np.subtract(
  7.         1,
  8.         ptRelRatio
  9.     ),
  10.     np.subtract(
  11.         1,
  12.         np.power(
  13.             np.add(
  14.                 1,
  15.                 np.multiply(
  16.                     np.divide(
  17.                         np.subtract(
  18.                             _KAPPA,
  19.                             1
  20.                         ),
  21.                         2
  22.                     ),
  23.                     np.power(
  24.                         MachRelIn,
  25.                         2
  26.                     )
  27.                 ),
  28.                 np.divide(
  29.                     np.multiply(
  30.                         -1,
  31.                         _KAPPA
  32.                     ),
  33.                     np.subtract(
  34.                         _KAPPA,
  35.                         1 # <----- IN DIESER ZEILE SOLL SICH DER FEHLER LAUF DEBUGGING VERSTECKEN
  36.                     )
  37.                 )
  38.             )
  39.         )
  40.     )
  41. )
  42.  



Habt ihr einen Tipp für mich? ich freue mich über Hilfe jeglicher Art :) Bereits jetzt ein dickes Dankeschön an euch für eure Hilfe, Mühe & Zeit.


Grüße
Der pythonDAU :)
Zuletzt geändert von Anonymous am Mittwoch 21. September 2016, 16:35, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

Re: Nicht nachvollziehbarer Numpy-Fehler

Beitragvon BlackJack » Mittwoch 21. September 2016, 16:41

@pythonDau: Das Problem ist der `np.add()`-Aufruf. Was hast Du Dir bei dem dritten Argument gedacht? Schau mal in die Dokumentation was der bedeutet.

An der Stelle frage ich mich auch warum Du die ganzen Funktionen verwendest, statt einfach Operatoren‽ Warum überhaupt Numpy? Hier ist kein Array in Sicht. War das Ziel es möglichst schwer lesbar und umständlich zu gestalten? ;-)

Edit: `np.power()` bekommt dafür nur *ein* Argument, was auch falsch ist.
pythonDau
User
Beiträge: 2
Registriert: Mittwoch 21. September 2016, 16:15

Re: Nicht nachvollziehbarer Numpy-Fehler

Beitragvon pythonDau » Mittwoch 21. September 2016, 17:02

BlackJack hat geschrieben:@pythonDau: Das Problem ist der `np.add()`-Aufruf. Was hast Du Dir bei dem dritten Argument gedacht? Schau mal in die Dokumentation was der bedeutet.


Ganz herzlichen Dank. Ich habe den Fehler vor lauter Klammern nicht mehr gesehen - die Methoden bekommen natürlich nur zwei Argumente übergeben und nicht drei (oder eins). Ich scheinen den Fehler einfach nicht mehr gesehen zu haben. Den - richtigen - Code habe ich unten angehängt.

BlackJack hat geschrieben:An der Stelle frage ich mich auch warum Du die ganzen Funktionen verwendest, statt einfach Operatoren‽ Warum überhaupt Numpy? Hier ist kein Array in Sicht. War das Ziel es möglichst schwer lesbar und umständlich zu gestalten? ;-)


Bei dem Code handelt es sich um mein Minimalbeispiel. In meinem Realen Code arbeite ich mit Pandas DataFrames, weshalb ich auf die vermeintlich umständlichere Lösung meine zurückgreifen zu müssen. Falls das einfacher möglich ist bin ich für Vorschläge immer offen.

Nochmal Danke.

Hier der fehlerfreie Code:

Code: Alles auswählen

import numpy as np

_KAPPA = 1.4
ptRelRatio = 0.95
MachRelIn = 0.8

zetaRRel = np.divide(
    np.subtract(
        1,
        ptRelRatio
    ),
    np.subtract(
        1,
        np.power(
            np.add(
                1,
                np.multiply(
                    np.divide(
                        np.subtract(
                            _KAPPA,
                            1
                        ),
                        2
                    ),
                    np.power(
                        MachRelIn,
                        2
                    )
                )
            ),
            np.divide(
                np.multiply(
                    -1,
                    _KAPPA
                ),
                np.subtract(
                    _KAPPA,
                    1
                )
            )
        )
    )
)
print(zetaRRel)
BlackJack

Re: Nicht nachvollziehbarer Numpy-Fehler

Beitragvon BlackJack » Mittwoch 21. September 2016, 17:18

@pythonDau: Welches Problem hast Du denn mit den ganz normalen Operatoren bei den `DataFrame`\s?
Sirius3
User
Beiträge: 6667
Registriert: Sonntag 21. Oktober 2012, 17:20

Re: Nicht nachvollziehbarer Numpy-Fehler

Beitragvon Sirius3 » Mittwoch 21. September 2016, 17:26

So sehen Deine 40 Zeilen aus:
  1. zetaRRel = (1 - ptRelRatio) / (1 - (1 + (_KAPPA - 1) / 2 * MachRelIn ** 2) ** (-_KAPPA / (_KAPPA - 1)))
Benutzeravatar
snafu
User
Beiträge: 5306
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Re: Nicht nachvollziehbarer Numpy-Fehler

Beitragvon snafu » Donnerstag 22. September 2016, 12:25

Und selbst mit Operatoren wäre es wahrscheinlich hilfreich, wenn man Zwischenergebnisse speichert. Nur weil man alles in eine Zeile schreiben kann, heißt nicht, dass es immer sinnvoll ist. Der Computer hat damit kein Problem, aber dafür die Menschen, die es lesen und nachvollziehen müssen.
shcol (Repo | Doc | PyPi)
BlackJack

Re: Nicht nachvollziehbarer Numpy-Fehler

Beitragvon BlackJack » Donnerstag 22. September 2016, 12:52

Man kann ja einen Kommentar dazu schreiben:
  1.               -ptRelRatio + 1              
  2. ───────────────────────────────────────────
  3.                                   -_KAPPA  
  4.                                  ──────────
  5.                                  _KAPPA - 1
  6.     ⎛         2 ⎛_KAPPA   1⎞    ⎞          
  7. 1 - ⎜MachRelIn ⋅⎜────── - ─⎟ + 1⎟          
  8.     ⎝           ⎝  2      2⎠    ⎠  


Edit:

Ansonsten kann man die Formel auch umstellen zu:
  1.                                                  _KAPPA  
  2.                                                ──────────
  3.                                                _KAPPA - 1
  4.                   ⎛         2                 ⎞          
  5. (-ptRelRatio + 1)⋅⎝MachRelIn ⋅(_KAPPA - 1) + 2⎠          
  6. ─────────────────────────────────────────────────────────
  7.                                                 _KAPPA  
  8.       _KAPPA                                  ──────────
  9.     ──────────                                _KAPPA - 1
  10.     _KAPPA - 1   ⎛         2                 ⎞          
  11.  - 2           + ⎝MachRelIn ⋅(_KAPPA - 1) + 2⎠

Und das dann als Code so schreiben:
  1. x0 = _KAPPA - 1
  2. x1 = _KAPPA / x0
  3. x2 = (MachRelIn**2 * x0 + 2)**x1
  4. result = x2 * (-ptRelRatio + 1) / (-2**x1 + x2)

Mit freundlicher Untrstützung von Sympy. :-)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder