(python 2)
我的for循环是这个
vx2=[]
vy2=[]
vz2=[]
for xn in range(0,npoints-2):
vx11=vx1[xn]+.5*(fxxx_list[xn]+fxxx_list[xn+1])*dt
vy11=vy1[xn]+.5*(fxxx_list[xn]+fxxx_list[xn+1])*dt
vz11=vz1[xn]+.5*(fxxx_list[xn]+fxxx_list[xn+1])*dt
vx2.append(vx11)
vy2.append(vy11)
vz2.append(vz11)
print vx2, vy2, vz2
我的教授。告诉我可以通过仅对Numpy数组进行操作来替换for循环来加快此过程,但是我发现在同一Numpy函数中乘以非整数并进行相乘是无效的。是否有一种优雅的方式使用Numpy而不是for循环来编写此代码?
我已经尝试过:
#number of iterations
xn=n1[0:998]
array=np.array(xn)
vxn=vx1[0:998]
vyn=vy1[0:998]
vzn=vz1[0:998]
vvv=np.multiply((dt),(fxxx_list))
vx2=vxn+vvv
vy2=vyn+vvv
vz2=vzn+vvv
但是我无法使我的算法完全正确,并且正如您所看到的那样,它有点混乱,并且花费的时间与for循环一样长。
答案 0 :(得分:0)
尝试一下:
fxxx_list = np.array(fxxx_list)
vx = np.array([vx1,vy1,vy2])
vx11, vy11, vz11 = vx + (fxxx_list[:-2] + fxxx_list[1:-1])/2 * dt
如果数组vx1,...的长度也为n_points,则应使用
vx = np.array([vx1,vy1,vy2])[:,:-2]
注意:我假设vx1,...的长度都相同