ValueError bei Verwendung von Befehlen in Funktion

Ich schaffe einige Funktionen, die ich mit Schlüsselwörtern anrufen kann, um bestimmte Funktionen aufzurufen,

import scipy.integrate as integrate import numpy as np def HubbleParam(a, model = "None"): if model == "LCDM": Omega_L0 = 0.7 Omega_m0 = 0.3 return np.sqrt( Omega_m0/a/a/a+ Omega_L0 ) if model == "Q": Omega_Q0 = 0.7 Omega_m0 = 0.3 return np.sqrt( Omega_m0/a/a/a + Omega_Q0/a ) def EmitterDistance(z, model = "None"): a = 1./(1.+z) if model == 'LCDM': integrand = 1./a/a/HubbleParam(a, model="LCDM") return [z , integrate.quad(integrand, a, 1.)[0] ] if model == "Q": integrand = 1/a/a/HubbleParam(a, model="Q") return [z, integrate.quad(inta, a, 1.)[0] ] z = np.linspace(0.,5., 1000) print EmitterDistance(z, model="LCDM") 

Wenn Sie versuchen, dieses Array zu drucken, wird dies zurückgegeben,

  • Löschen von Ordnerinhalten in Python
  •  Traceback (most recent call last): File "/Users/alexandres/Desktop/Formation_Galaxies/Homework1/FoG_HW1.py", line 95, in <module> print EmitterDistance(z, model="LCDM") File "/Users/alexandres/Desktop/Formation_Galaxies/Homework1/FoG_HW1.py", line 87, in EmitterDistance return [z , integrate.quad(integrand, a, a)[0] ] File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/scipy/integrate/quadpack.py", line 315, in quad points) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/scipy/integrate/quadpack.py", line 364, in _quad if (b != Inf and a != -Inf): ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() [Finished in 0.5s with exit code 1] [shell_cmd: python -u "/Users/alexandres/Desktop/Formation_Galaxies/Homework1/FoG_HW1.py"] [dir: /Users/alexandres/Desktop/Formation_Galaxies/Homework1] [path: /usr/bin:/bin:/usr/sbin:/sbin] 

    Oder noch wichtiger

    ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

    Was ist hier falsch?

  • Verwenden Sie eine Schleife in Python, um Variablen zu benennen
  • Probleme mit wechselnder Variable mit dem Kontrollkästchen
  • Python - Sicherstellen einer Variablen hält eine positive Zahl
  • Python Cross Modul Variablen
  • Finden, ob ein String mit einem der Präfixe mit einer variablen Länge beginnt
  • Zuweisen von Werten zu Variablen in einer Liste mit einer Schleife
  • 2 Solutions collect form web for “ValueError bei Verwendung von Befehlen in Funktion”

    In EmitterDistance() dein erstes Argument zu integrate.quad() sollte eine Funktion. Aber es ist ein Array, stattdessen.

    Diese Art von Fehler ergibt sich, wenn Sie ein Array in einem Kontext verwenden, der einen Skalarwert erwartet. Es testet a != -Inf in einem if Ausdruck. a und b hier sind die Grenzpunkte der Integration. Sie sollten Skalare sein, nicht Arrays. Aber du rufst quad mit:

      quad(integrand, a, a) 

    a hier ist a = 1./(1.+z) und z ist das Array, das durch linspace erzeugt wird.

    integrand sieht auch problematisch aus. Es ist Array aus a . Es sollte stattdessen eine Funktion sein. Etwas, das einen Skalar nimmt und einen Wert zurückgibt. HubbleParam könnte funktionieren, oder eine lambda oder Funktion def mit ihm.

    Python ist die beste Programmiersprache der Welt.