给定函数的错误:只能将大小为1的数组转换为Python标量

给定函数的错误:只能将大小为1的数组转换为Python标量,python,typeerror,vectorization,equation,Python,Typeerror,Vectorization,Equation,我是一个新手,目前正在尝试绘制这个函数,以便我可以选择一个x值范围,我应该在ChemistryLab中执行我的实验 我找到了关于绘图函数的不同文章,这些文章都使用了像sin(x)这样的通用函数。 但是一旦我输入了我的函数,它就不工作了。在前两行之后,问题已经出现: import numpy as np import math X = np.linspace(0, 512, 256) f = ((x+22)- math.sqrt((x+22)**2-4*2*x)) --> TypeErr

我是一个新手,目前正在尝试绘制这个函数,以便我可以选择一个x值范围,我应该在ChemistryLab中执行我的实验

我找到了关于绘图函数的不同文章,这些文章都使用了像sin(x)这样的通用函数。 但是一旦我输入了我的函数,它就不工作了。在前两行之后,问题已经出现:

import numpy as np
import math

X = np.linspace(0, 512, 256)
f = ((x+22)- math.sqrt((x+22)**2-4*2*x))

--> TypeError: only size-1 arrays can be converted to Python scalars
我发现线程说X应该矢量化,但我无法想出解决方案


提前谢谢你的帮助

创建一个矢量化函数。例如:

    equation_func = np.vectorize(math.sqrt)
    new_f = equation_func(X)

将math.sqrt与包含更复杂等式的函数交换,您就到家了。

在Python中实现数学函数的一个好方法可能是,作为Python函数,这并不奇怪。例如,您可以在列表理解中使用该函数来获取值数组:

将numpy导入为np
输入数学
将matplotlib.pyplot作为plt导入
X=np.linspace(0,512,256)
def f(x):
返回x+22-数学sqrt((x+22)**2-8*x)
Y=np.数组([f(x)表示x中的x])
plt.图(X,Y);

感谢您的快速回复和优雅的解决方案!