Python 索引器错误:索引1超出大小为1的轴0的界限,范围(n-1)已存在

Python 索引器错误:索引1超出大小为1的轴0的界限,范围(n-1)已存在,python,python-3.7,Python,Python 3.7,我试图找到一堆数据的梯形积分,但它一直在说 File "D:/uni work/Sci programming/aps3.py", line 25, in trapz x2 = x[i+1] IndexError: index 1 is out of bounds for axis 0 with size 1' 我将范围(n)更改为范围(n-1),但仍然得到相同的错误 import numpy as np solarfile = open('solar.dat','r',) x1=[]#wa

我试图找到一堆数据的梯形积分,但它一直在说

File "D:/uni work/Sci programming/aps3.py", line 25, in trapz
x2 = x[i+1]

IndexError: index 1 is out of bounds for axis 0 with size 1'
我将范围(n)更改为范围(n-1),但仍然得到相同的错误

import numpy as np
solarfile = open('solar.dat','r',)
x1=[]#wavelength
y1=[]#irradiance
for theline in solarfile:
    num = theline.split()
    x1.append(float(num[0]))
    y1.append(float(num[1]))
x=np.array([x1])
y=np.array([y1])


a = int(input("Please Enter the lower bound: "))
b = int(input("Please enter the upper bound: "))
if (a<np.argmin(x)):
    a =np.argmin(x)
if (b>np.argmax(x)):
    b =np.argmax(x)
n = b - a
def trapz(x,y,a,b):
    traparray=[]
    for i in range(n-1):

        x1 = x[i]
        x2 = x[i+1]
        dx = x2-x1
        y1 = y[i]
        y2 = y[i+1] 
        dy = y2-y1
        trap = ((y1*dx)+(0.5*(dy*dx)))
        d = traparray.append(trap)
return (s)
print (trapz(x,y,a,b))
solarfile.close()
将numpy导入为np
solarfile=open('solar.dat','r',)
x1=[]波长
y1=[]辐照度
对于solarfile中的线路:
num=theline.split()
x1.追加(浮点(num[0]))
y1.追加(浮点(num[1]))
x=np.数组([x1])
y=np.数组([y1])
a=int(输入(“请输入下限:”)
b=int(输入(“请输入上限:”)
如果(anp.argmax(x)):
b=np.argmax(x)
n=b-a
def trapz(x、y、a、b):
traparray=[]
对于范围(n-1)内的i:
x1=x[i]
x2=x[i+1]
dx=x2-x1
y1=y[i]
y2=y[i+1]
dy=y2-y1
陷阱=((y1*dx)+(0.5*(dy*dx)))
d=traparray.append(陷阱)
报税表
打印(trapz(x,y,a,b))
solarfile.close()

我一直在尝试一些东西,但它们不起作用。

由于访问数组中不存在的元素,所以出现了索引错误

您的n值未定义,或者它也可能使用了大于数组x长度的全局值n

将25上的行更改为如下所示,以便它只执行数组的长度


适用于范围内的i(len(x)-1)

但n是边界“对不起,我应该把它包括在代码(b-a)中”我明白了。因此,当你到达最后一个元素时,你正在试图得到下一个元素的值,即,
x2=x[i+1]
,这是不可能的,因为它不存在。因此,只要将for循环更改为范围(n-2)中i的
,我认为它应该可以工作。您需要加入一些逻辑,以确保您不会要求不存在的项目。从错误消息中,您似乎只传递了一个项目的序列-在这种情况下,将永远不会有下一个项目。-可能会有帮助。
x的形状是什么(
x.shape
)-也许
x=np.array([x1])
应该是
x=np.array(x1)
?我没有intertools,我的讲师只教过我们numpy和matlibplot谢谢二战期间的帮助,更改第9行和第10行修复了错误。现在只需修复实际的for循环