python - 函数集成返回 “only length-1 arrays can be converted to Python scalars”

标签 python function numpy typeerror integrate

我正在尝试将一个函数集成到给定范围内,该范围显示零角度 (theta) 方向上的粒子流与粒子能量 E 的函数关系。我尝试了几种方法并遇到了不同的错误,但最后有两种错误仍然存​​在。我对 Python 的了解有限,我尝试学习新的方法来做我需要的事情,但我已经使用这个函数好几天了,但没有成功。

我现在的功能是这样的:

from numpy import radians, cos, arange
from scipy.integrate import quad

def integral(self):
    theta=0
    E = arange(1, 5000, 1)
    costh = cos(radians(theta))
    a = 18 / (E * costh + 145)
    b = (E + 2.7 / costh)**-2.7
    c = (E + 5) / (E + 5 / costh)
    return a*b*c*1**4


A = quad(integral, 500, 1000)

将“quad”应用于这样的函数返回:

TypeError: only length-1 arrays can be converted to Python scalars

如果我不将“self”作为函数中的参数,它会返回:

TypeError: integral() takes 0 positional arguments but 1 was given

有人知道如何绕过这个吗?

最佳答案

integral 必须具有 scipy documentation 中描述的签名之一.在您的情况下,一个以 double 作为参数并返回 double 的函数似乎是合适的。

self 仅用于类的成员函数。它在类定义之外没有意义。将其替换为一个简单的名称,例如 x,它将成为要集成的函数的输入参数。

该函数必须返回一个double。由于 E 是一个数组并且您似乎用它进行计算,因此计算的返回值也可能是一个数组。它必须是一个标量。修复它,它将起作用。当你用类似的东西替换你的函数时:

def integral(x):
    return x * x

然后就可以了。当然,这不是您需要的,但这是 quad() 工作所需的参数和返回值类型。

你可能想看看here有关如何使用 quad() 的示例。

一些建议:

  • 使用四个空格进行缩进(不是示例中的 5 个)
  • 结果周围的括号不是必需的。为了更清晰起见,请移除。

关于python - 函数集成返回 “only length-1 arrays can be converted to Python scalars”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50438066/

相关文章:

python - 为什么函数对象在 python 中评估为 True?

用于函数调用的 Java 正则表达式

python - 如何使用线性插值法对 numpy 数组进行插值

python - 汇总分组 Pandas 数据框中的行并返回 NaN

python - 通过定义排序顺序,根据子字典键对 python 字典键进行排序

python - str类型Python 2中的UTF-8编码

python - 为什么 Numpy 比这个 cython 例程好 3 倍

python - 合并时间到时间段

javascript - 使用className.onclick JS调用函数

python - 在 matplotlib 中绘制概率分布的积分