python中函数的函数。ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()

2024-09-27 21:33:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手,我需要在我的硕士论文中使用它

第一个名为p_nfw_mean2的函数可以工作,它使用巨像,一个用于宇宙学计算的python工具包。我不明白为什么当我调用使用第一个p_nfw_意味2的函数clumping_factor时,我得到:

ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()

问题是聚束因子中的p_nfw_mean2,因为如果我删除它,代码就可以完美地工作

以下是功能:

#Mean of NFW profile square
def p_nfw_mean2(z, Mvir):
    Rvir = peaks.lagrangianR(Mvir)
    cvir, mask = concentration.modelDiemer19(Mvir, z)
    p_nfw = profile_nfw.NFWProfile(Mvir, cvir, z, mdef = 'vir')
    func = lambda r: p_nfw.density(r)**2 * r**2
    result, none = integrate.quadrature(func, 0.0, Rvir, tol=1e-7, rtol=1e-7, maxiter=1000)
    return 4.0 * pi * result

#Clumping factor
def clumping_factor(z):
    func = lambda Mvir, z: (ro_m / Mvir) * mass_function.massFunction(Mvir, z, q_in='M', q_out='M2dndM', mdef='fof', model='sheth99') * p_nfw_mean2(z, Mvir)
    result, none = integrate.quadrature(func, Mvir_min, Mvir_max, args=(z,), tol=1e-7, rtol=1e-7, maxiter=1000)
    return result

我得到:


 File "mynotebook.py", line 11, in <module>
    print(mm.clumping_factor(z))
  File "/Users/Noemi/Desktop/mymodule.py", line 86, in clumping_factor
    result, none = integrate.quadrature(func, Mvir_min, Mvir_max, args=(z,), tol=1e-7, rtol=1e-7, maxiter=1000)
  File "/usr/local/lib/python3.7/site-packages/scipy/integrate/quadrature.py", line 242, in quadrature
    newval = fixed_quad(vfunc, a, b, (), n)[0]
  File "/usr/local/lib/python3.7/site-packages/scipy/integrate/quadrature.py", line 123, in fixed_quad
    return (b-a)/2.0 * np.sum(w*func(y, *args), axis=-1), None
  File "/usr/local/lib/python3.7/site-packages/scipy/integrate/quadrature.py", line 153, in vfunc
    return func(x, *args)
  File "/Users/Noemi/Desktop/mymodule.py", line 85, in <lambda>
    func = lambda Mvir, z: (ro_m / Mvir) * mass_function.massFunction(Mvir, z, q_in='M', q_out='M2dndM', mdef='fof', model='sheth99') * p_nfw_mean2(z, Mvir)
  File "/Users/Noemi/Desktop/mymodule.py", line 80, in p_nfw_mean2
    result, none = integrate.quadrature(func, 0.0, Rvir, tol=1e-7, rtol=1e-7, maxiter=1000)
  File "/usr/local/lib/python3.7/site-packages/scipy/integrate/quadrature.py", line 242, in quadrature
    newval = fixed_quad(vfunc, a, b, (), n)[0]
  File "/usr/local/lib/python3.7/site-packages/scipy/integrate/quadrature.py", line 119, in fixed_quad
    if np.isinf(a) or np.isinf(b):
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

也许这和numpy有关

非常感谢


Tags: inpylibusrlocallineresultfile

热门问题