Индекс выходит за границы с осью?Что это значит? - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть этот код, который берет мои массивы, x1, y1, z1, vx1, vy1, vz1, и работает с ними (это основная часть кода), и в конце я остаюсь с новыми массивами x2, y2, z2, vx2, vy2, vz2.Я хочу сделать весь код, обновив x1 с x2, y1 с y2 и т. Д. Однако, когда я устанавливаю x1 = x2 ... в конце моего кода, я получаю следующее сообщение об ошибке:

 Traceback (most recent call last):
      File "myfile.py", line 33, in <module>

      File "myfile.py", line 30, in do_work
        M[xn,step] = ((mass1[xn]*mass1[step+1]*((x1[step+1]**2.+y1[step+1]**2.+z1[step+1]**2.)-(x1[xn]**2.+y1[xn]**2.+z1[xn]**2.)))/  (abs((x1[step+1]**2.+y1[step+1]**2.+z1[step+1]**2.)-(x1[xn]**2.+y1[xn]**2.+z1[xn]**2.))**2.+(.2)**2  )**(3))

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

и я не могу понять, почему.Я не понимаю, почему мой код не будет работать для моих новых массивов x2, y2, z2, ... и т. Д. (Я знаю, что моя функция - беспорядок, но я боюсь, что проблема может быть там ивот почему я публикую это как есть)

import matplotlib.pyplot as plt
import numpy as np
import time
import itertools
start_time = time.time()


G=1
dt=.01

n1 = np.loadtxt('homo_sph_N1000_R3_v1.dat',usecols=(0),skiprows=0)
mass1= np.loadtxt('homo_sph_N1000_R3_v1.dat',usecols=(1),skiprows=0)
x1=np.loadtxt('homo_sph_N1000_R3_v1.dat',usecols=(2),skiprows=0)
y1=np.loadtxt('homo_sph_N1000_R3_v1.dat',usecols=(3),skiprows=0)
z1=np.loadtxt('homo_sph_N1000_R3_v1.dat',usecols=(4),skiprows=0)
vx1=np.loadtxt('homo_sph_N1000_R3_v1.dat',usecols=(5),skiprows=0)
vy1=np.loadtxt('homo_sph_N1000_R3_v1.dat',usecols=(6),skiprows=0)
vz1=np.loadtxt('homo_sph_N1000_R3_v1.dat',usecols=(7),skiprows=0)

npoints=len(n1)-1

M = np.zeros((npoints,npoints))

for timestep in xrange(0,2):

     def do_work(xn, step):

         #This is where I begin operating on intial arrays
         M[xn,step] = ((mass1[xn]*mass1[step+1]*((x1[step+1]**2.+y1[step+1]**2.+z1[step+1]**2.)-(x1[xn]**2.+y1[xn]**2.+z1[xn]**2.)))/  (abs((x1[step+1]**2.+y1[step+1]**2.+z1[step+1]**2.)-(x1[xn]**2.+y1[xn]**2.+z1[xn]**2.))**2.+(.2)**2  )**(3))

     [do_work(xn, step) for (xn,step) in itertools.product(xrange(0,npoints), xrange(0,npoints))]


     a=[np.sum(arr) for arr in M]


     a = np.array(a)
     vxx = np.array(vx1)
     vyy=np.array(vy1)
     vzz=np.array(vz1)
     vx=vxx[0:npoints]
     vy=vyy[0:npoints]
     vz=vzz[0:npoints]


     vx2 = vx + (a +a)/2  * dt
     vy2 = vy + (a +a)/2  * dt
     vz2 = vz + (a+a)/2   * dt

     xx = np.array(x1)
     yy = np.array(y1)
     zz = np.array(z1)

     x=xx[0:npoints]
     y=yy[0:npoints]
     z=zz[0:npoints]

#x2,y2,z2.... are new arrays
     x2= np.array((x+vx2*dt) + (a*dt**2)/2)
     y2= np.array((y+vy2*dt) + (a*dt**2)/2)
     z2= np.array((z+vz2*dt) + (a*dt**2)/2)


  #I set x1....=x2... so this whole thing will loop using the new array values 
     x1=x2
     y1=y2
     z1=z2

1 Ответ

0 голосов
/ 08 февраля 2019

вычесть 1 из npoints

[do_work(xn, step) for (xn,step) in itertools.product(xrange(0,npoints-1), xrange(0,npoints-1))]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...