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

python中函数的函数。ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all(),python,colossus,Python,Colossus,我是python新手,我需要在我的硕士论文中使用它 第一个名为p_nfw_mean2的函数可以工作,它使用巨像,一个用于宇宙学计算的python工具包。我不明白为什么当我调用使用第一个p_nfw_意味2的函数clumping_factor时,我得到: ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all() 问题是聚束因子中的p_nfw_mean2,因为如果我删除它,代码就可以完美地工作 以下是功能: #Mean of NFW profile square def

我是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()

文件“mynotebook.py”,第11行,在
打印(毫米聚集系数(z))
文件“/Users/Noemi/Desktop/mymodule.py”,第86行,聚集系数
结果,无=积分.求积(func,Mvir_min,Mvir_max,args=(z,),tol=1e-7,rtol=1e-7,maxiter=1000)
文件“/usr/local/lib/python3.7/site packages/scipy/integrate/quadrature.py”,第242行,正交格式
newval=fixed_quad(vfunc,a,b,(),n)[0]
文件“/usr/local/lib/python3.7/site packages/scipy/integrate/quadrature.py”,第123行,固定格式
返回值(b-a)/2.0*np.sum(w*func(y,*args),轴=-1),无
vfunc中的文件“/usr/local/lib/python3.7/site packages/scipy/integrate/quadrature.py”,第153行
返回函数(x,*args)
文件“/Users/Noemi/Desktop/mymodule.py”,第85行,在
func=lambda Mvir,z:(ro_m/Mvir)*质量函数。质量函数(Mvir,z,q_in='m',q_out='M2dndM',mdef='fof',model='sheth99')*p_nfw_平均值2(z,Mvir)
文件“/Users/Noemi/Desktop/mymodule.py”,第80行,p\u nfw\u means2
结果,无=积分求积(func,0.0,Rvir,tol=1e-7,rtol=1e-7,maxiter=1000)
文件“/usr/local/lib/python3.7/site packages/scipy/integrate/quadrature.py”,第242行,正交格式
newval=fixed_quad(vfunc,a,b,(),n)[0]
文件“/usr/local/lib/python3.7/site packages/scipy/integrate/quadrature.py”,第119行,固定格式
如果np.isinf(a)或np.isinf(b):
ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()
也许这和numpy有关


非常感谢

请包含完整的错误消息。我添加了它@DYZ应该
Rvir
是调用
integrate.quarture
中的数组
p\u nfw\u mean2
?@SebastianDziadzio可能是,但我只使用浮点数,我将Mvir作为浮点数,所以我认为Rvir也应该是浮点数。抱歉,我不熟悉python和一般的编码。您可以在文档中看到,它返回一个类似于的
数组。似乎如果给它一个数字,它仍然会返回一个数组,但只有一个元素。您可以使用
Rvir.item
提取该元素。请包含完整的错误消息。我添加了它@DYZ应该
Rvir
是调用
integrate.quarture
中的数组
p\u nfw\u mean2
?@SebastianDziadzio可能是,但我只使用浮点数,我将Mvir作为浮点数,所以我认为Rvir也应该是浮点数。抱歉,我不熟悉python和一般的编码。您可以在文档中看到,它返回一个类似于
数组。似乎如果给它一个数字,它仍然会返回一个数组,但只有一个元素。您可以使用
Rvir.item
提取该元素。