用NumPy代替带乘法和加法的函数的forloop

2024-09-27 04:22:05 发布

您现在位置:Python中文网/ 问答频道 /正文

(Python2)

我的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循环一样长


Tags: numpyfordtlistappendxnvvvvx1
1条回答
网友
1楼 · 发布于 2024-09-27 04:22:05

试试这个:

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\u点

vx = np.array([vx1,vy1,vy2])[:,:-2]

注:我假设vx1,。。。都是一样长的

相关问题 更多 >

    热门问题