IndexError: индекс 1 выходит за пределы оси 0 с размером 1, с диапазоном (n-1) уже - PullRequest
0 голосов
/ 19 февраля 2020

Я пытаюсь найти трапецеидальную интеграцию группы данных, но она все время говорит:

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()

Я продолжаю пробовать вещи, но они не работают.

1 Ответ

0 голосов
/ 19 февраля 2020

Вы получаете ошибку индексации, так как вы получаете доступ к элементу в массиве, который не существует.

Ваше значение n не определено, или также возможно, что он использует глобальный значение n, которое больше, чем длина массива x.

Измените строку на 25 следующим образом, чтобы она выполнялась только с длиной массива.

for i in range(len(x)-1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...