我有一个数组,我们称它为e:
e=[1,2,3]我把它包含在一个函数中:
def f(x,y):
return (69+e[x]*g(x)*y)/(420+g(x)*y)其中g(x)是我在前面定义的函数。现在,我想做一个等高线图,所以我定义:
x=[0,1,2]
y=np.linspace(69,420,69420)
X, Y = np.meshgrid(x, y)
fig, axs = plt.subplots()
axs.contour(X,Y,G(X,Y),levels=[420.69],colors='black')这基本上就是我想要做的,我该如何调试呢?或者,有没有更好的方法来编写我想要做的事情?
编辑:哦,我打错了。我实际上在函数中包含了e[int(x)],而不仅仅是e[x]
编辑:我想通过使用代码的“简化”形式来简化我的问题,但似乎有些人对整个事情感兴趣。
而不是我实际使用的f(x,y):
def Nseen(x,y):
return (0.147*8.815*10**(-6)+e[int(x/5-16)]*y*G(x)*2*y*GW(x))/(4.1/1000+y*G(x))*26340*20.3在G(x)和GW(x)本身是依赖于其他函数的其他函数的情况下,让我将整个代码粘贴到这里:
def a(x,m):
return (x**2-m**2)**2*(x**2+2*m**2)
def b(x,m):
return 6*(x**2-m**2)*m**2
def c(x,m):
return 3*(x**2-2*m**2)
def f1(x,m,g):
return -2*x**2*(x**2-2*m**2)+(a(x,m)+c(x,m)*g**2*m**2)/(g*m)*(np.arctan((x**2-m**2)/(g*m))-np.arctan((-m**2)/(g*m)))-1/2*(b(x,m)+2*g**2*m**2)*np.log((g**2*m**2+(x**2-m**2)**2)/(g**2*m**2+m**4))
def f(x,m,g):
return f1(x,m,g)*(m**4/(96*x**8))
def GW(x):
return GF**2*x**5/(np.pi**3)*(f(x,MW,GW))
def G(x):
return GF*MH*x**2/(4*np.sqrt(2)*np.pi)*(1-x**2/MH**2)**2这些是我使用的所有数字:
GF=1.1663787*10**(-5)
S2TH=0.23122
MW=80.378
MZ=91.1876
MH=125.18
GW=2.085
GZ=2.4952我使用的是:
e = [0.007400,0.002300,0.000600,0.01840,0.06040,0.09570,0.1412,0.1718,0.1718]和
x = np.linspace(80,120,9)
y = np.linspace(10**(-8),10,1000)发布于 2021-08-26 19:22:38
你的错误可以归结为:
import numpy
x = numpy.linspace(80,120,9)
e = [1,2,3]
print(e[int(x)])TypeError:只能将大小为1的数组转换为Python标量
这是因为x是一个numpy数组,不能用作列表的索引。注意:
print(x)将会给你一些类似的东西:
[ 80. 85. 90. 95. 100. 105. 110. 115. 120.]我真的不确定你希望用什么来索引e,也许你可以试试:
e[int(x[0])]这不是一个真正的答案,我会在你回复后删除它,但这里有太多内容无法输入评论。
https://stackoverflow.com/questions/68942337
复制相似问题