错误:索引2超出大小为2的轴0的界限

2024-03-28 15:11:06 发布

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

这是我第一次来这里。抱歉,我对python还很陌生。作为我大学课程的一部分,我正在尝试使用蒙特卡罗方法来计算8D中的积分。然而,当我运行程序时,当我定义x0[I]时,我会得到标题中描述的错误。它似乎只允许我运行到2,但我想调查错误,因为N是变化的,所以我需要能够使用N>;2.任何帮助都将不胜感激

杰克

a=0          #Defining Limits of Integration 
b=np.pi/8
N=4    #Number of random numbers generated in each dimension

for i in range(N):
     x0rand[i]=((np.pi)/8)*np.random.uniform(0,1) #Generates N random numbers 8D between 0 and pi/8
     x1rand[i]=((np.pi/8))*np.random.uniform(0,1)
     x2rand[i]=((np.pi/8))*np.random.uniform(0,1)
     x3rand[i]=((np.pi/8))*np.random.uniform(0,1)
     x4rand[i]=((np.pi/8))*np.random.uniform(0,1)
     x5rand[i]=((np.pi/8))*np.random.uniform(0,1)
     x6rand[i]=((np.pi/8))*np.random.uniform(0,1)
     x7rand[i]=((np.pi/8))*np.random.uniform(0,1)

def func(x0,x1,x2,x3,x4,x5,x6,x7):  #Defining the integrand
    return (10**6)*np.sin(x0+x1+x2+x3+x4+x5+x6+x7)

integral = 0.0
for i in range(N):
integral += func(x0rand[i],x1rand[i],x2rand[i],x3rand[i],x4rand[i],x5rand[i],x6rand[i],x7rand[i])

answer=(((b-a)**8)/N)*integral
print ('The Integral is:', answer)

IndexError                                Traceback (most recent call last)
<ipython-input-141-1a3483405a4d> in <module>()
  4 
  5 for i in range(N):
  ----> 6   x0rand[i]=((np.pi)/8)*np.random.uniform(0,1) #Generates N random numbers 8D between 0 and pi/8
  7   x1rand[i]=((np.pi/8))*np.random.uniform(0,1)
  8   x2rand[i]=((np.pi/8))*np.random.uniform(0,1)

 IndexError: index 2 is out of bounds for axis 0 with size 2

Tags: ofinfor错误nppirangerandom
2条回答

不幸的是,这段代码不起作用,无论如何,我建议使用numpy的强大功能:

一些热门歌曲

for i in range(N):
     x0rand[i]=((np.pi)/8)*np.random.uniform(0,1) #Generates N random numbers 8D between 0 and pi/8
     x1rand[i]=((np.pi/8))*np.random.uniform(0,1)
     x2rand[i]=((np.pi/8))*np.random.uniform(0,1)
     x3rand[i]=((np.pi/8))*np.random.uniform(0,1)
     x4rand[i]=((np.pi/8))*np.random.uniform(0,1)
     x5rand[i]=((np.pi/8))*np.random.uniform(0,1)
     x6rand[i]=((np.pi/8))*np.random.uniform(0,1)
     x7rand[i]=((np.pi/8))*np.random.uniform(0,1)

可以在矢量模式下初始化,您可以看到大小参数

xrand = np.random.uniform(0,1,size=(N,))

功能本身可以变得更高效。 调用它将更具可读性

def func(arr):  #Defining the integrand
    return (10**6)*np.sin(arr.sum())

func(xrand)

发布的程序不是已运行的完整代码,否则您将得到消息NameError: name 'x0rand' is not defined。您必须在之前定义并标注了x0rand,并且尺寸为2而不是N

要(重新)适当地定义x0rand等,您可以

x0rand, x1rand, x2rand, x3rand, x4rand, x5rand, x6rand, x7rand = np.zeros((8, N))

在循环之前

相关问题 更多 >