我正在尝试避免使用for循环来运行我的计算。但是我不知道该怎么做。我有一个w
形状矩阵(40,100)
。每条线一次都保持波浪的位置t
。例如,第一行w[0]
是初始条件(也是w[1]
出于我将要说明的原因)。
为了计算下一行元件我使用,对于每一个t
和x
上形状范围:
w[t+1,x] = a * w[t,x] + b * ( w[t,x-1] + w[t,x+1] ) - w[t-1,x]
其中a
和b
是基于方程解的一些常量(它其实并不重要), ,a = 2(1-r)
,。b=r
r=(c*(dt/dx))**2
哪里c
的波速和dt
,与方向和dx
增量有关。x
t
有什么办法可以避免for循环:
for t in range(1,nt-1):
for x in range(1,nx-1):
w[t+1,x] = a * w[t,x] + b * ( w[t,x-1] + w[t,x+1] ) - w[t-1,x]
nt
和nx
是w
矩阵的形状。
我假设您正在设置w[:,0]
并w[:-1]
预先设置(某些常量?),因为在循环中看不到它。如果是这样,则可以消除for x
对这部分代码进行循环矢量化处理:
for t in range(1,nt-1):
w[t+1,1:-1] = a*w[t,1:-1] + b*(w[t,:-2] + w[t,2:]) - w[t-1,1:-1]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句