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循环