首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeError:只有大小为1的数组才能使用函数和数组转换为Python标量

TypeError:只有大小为1的数组才能使用函数和数组转换为Python标量
EN

Stack Overflow用户
提问于 2021-08-26 16:35:09
回答 1查看 507关注 0票数 0

我有一个数组,我们称它为e:

代码语言:javascript
复制
e=[1,2,3]

我把它包含在一个函数中:

代码语言:javascript
复制
def f(x,y):
 return (69+e[x]*g(x)*y)/(420+g(x)*y)

其中g(x)是我在前面定义的函数。现在,我想做一个等高线图,所以我定义:

代码语言:javascript
复制
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)

代码语言:javascript
复制
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)本身是依赖于其他函数的其他函数的情况下,让我将整个代码粘贴到这里:

代码语言:javascript
复制
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

这些是我使用的所有数字:

代码语言:javascript
复制
GF=1.1663787*10**(-5)
S2TH=0.23122
MW=80.378
MZ=91.1876
MH=125.18
GW=2.085
GZ=2.4952

我使用的是:

代码语言:javascript
复制
e = [0.007400,0.002300,0.000600,0.01840,0.06040,0.09570,0.1412,0.1718,0.1718]

代码语言:javascript
复制
x = np.linspace(80,120,9)
y = np.linspace(10**(-8),10,1000)
EN

回答 1

Stack Overflow用户

发布于 2021-08-26 19:22:38

你的错误可以归结为:

代码语言:javascript
复制
import numpy

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

TypeError:只能将大小为1的数组转换为Python标量

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

代码语言:javascript
复制
print(x)

将会给你一些类似的东西:

代码语言:javascript
复制
[ 80.  85.  90.  95. 100. 105. 110. 115. 120.]

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

代码语言:javascript
复制
e[int(x[0])]

这不是一个真正的答案,我会在你回复后删除它,但这里有太多内容无法输入评论。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68942337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档