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?

  • Wie kann ich env vars auf Sublime Text bestehen?
  • Set env var in Python multiprocessing.Process
  • Variable Umfang und versuchen Catch in Python
  • Wie kann ich ein Ergebnis einer Funktion in einer Variable in Python speichern?
  • Wie bekomme ich die Umgebung von einem Unterprozess in Python
  • Python große variable RAM-Nutzung
  • 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.