【发布时间】:2019-08-21 21:15:00
【问题描述】:
我正在从两个大小为 (1000,100,100,100) 和 (100,100,100) 的数组构建一个 (1000,100,100,100) 数组。为此,我使用 for 循环来运行第一个条目 (0 - 1000)。但是,我的代码(如下)仍然很慢,作为初学者,我想知道是否有更有效的方法来做到这一点。
n_train = 1000
Nx = 100
Ny = 100
Nt = 100
x = np.linspace(-Nx, Nx, 100)
y = np.linspace(-Ny, Ny, 100)
t = np.linspace(0, Nt-1, 100)
def gw(xx, yy, tt):
num1 = tt - np.sqrt(xx**2+yy**2)
denom = (tt**2-xx**2-yy**2)
if denom < 0:
denom1 = 0
else:
denom1 = np.sqrt(denom)
kk = np.heaviside(num1,1)/(2*np.pi*denom1+1)
return (kk)
# Slow FOR-LOOP
for i_train in range (n_train):
ugreen = np.array([gw(i, j, k) for k in t for j in y for i in x])
Ugreen = ugreen.reshape(Nt, Ny, Nx)
prob = randrange(2)
Utot = UN[i_train,:,:,:] + Ugreen/1.75*prob
Utot = (Utot - np.min(Utot))/(np.max(Utot)-np.min(Utot))
Utot_green = 10*Ugreen/1.75*prob
P[i_train,:,:,:] = Utot
Pg[i_train,:,:,:]= Utot_green
【问题讨论】:
-
查看code review,它针对这样的优化问题
-
@C.Nivs,你在 CR 上回答过这样的问题吗?
标签: python arrays python-3.x numpy for-loop