TypeError:只有size1数组可以通过函数和数组转换为Python标量

2024-05-14 15:05:48 发布

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

我有一个数组,我们称之为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)

Tags: 函数代码编辑return定义defnpint
1条回答
网友
1楼 · 发布于 2024-05-14 15:05:48

您的错误可以归结为:

import numpy

x = numpy.linspace(80,120,9)
e = [1,2,3]
print(e[int(x)])

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

这是因为x是一个numpy数组,不能用作列表的索引。注:

print(x)

会给你一些类似的东西:

[ 80.  85.  90.  95. 100. 105. 110. 115. 120.]

我不确定您希望用什么来索引e,也许您可以尝试:

e[int(x[0])]

这不是一个真正的答案,我会在你回复后删除它,但这里有太多的评论类型

相关问题 更多 >

    热门问题