【发布时间】:2018-07-16 06:28:02
【问题描述】:
我们正在模拟法国海湾(圣米歇尔山)的沉积物,为此,我们将沉积物(以数字表示)放入数组中。 存款在我们的 1000x1000 阵列中是随机的,中间有一个岛。
在程序结束时,我们希望将我们的海湾除数字为零的岛屿之外的所有地方都进行平滑处理。
我们做到了,但是运行时间太长了。有人可以帮助我们找到一种方法来加速我们的程序吗?
for j in range (0,375):
for decale in range (250):
diff=M[749+decale][j]-M[749+decale+1][j]
if diff>=3:
M[749+decale][j]-=floor(19*diff/20)
M[749+decale+1][j]+=floor(19*diff/20)
for j in range (625,1000): #for the S-W of the bay
for decale in range (250):
diff=M[749+decale][j]-M[749+decale+1][j]
if diff>=3:
M[749+decale][j]-=floor(19*diff/20)
M[749+decale+1][j]+=floor(19*diff/20)
for i in range (800,1000):
for decale in range (799): For the West of the bay
diff=M[i][200+decale]-M[i][200+decale+1]
if diff>=3:
M[i][200+decale]-=floor(19*diff/20)
M[i][200+decale+1]+=floor(19*diff/20)
for decale in range (799): #Idem
diff=M[i][799-decale]-M[i][799-decale-1]
if diff>=3:
M[i][799-decale]-=floor(19*diff/20)
M[i][799-decale-1]+=floor(19*diff/20)
for j in range (0,375): #Along the island
for decale in range (350):
diff=M[850-decale][j]-M[850-decale-1][j]
if diff>=3:
M[850-decale][j]-=floor(19*diff/20)
M[850-decale-1][j]+=floor(19*diff/20)
for j in range(625,1000): #Idem
for decale in range (350):
diff=M[850-decale][j]-M[850-decale-1][j]
if diff>=3:
M[850-decale][j]-=floor(19*diff/20)
M[850-decale-1][j]+=floor(19*diff/20)
for i in range (500,549): #Idem
for decale in range (500):
diff=M[i][499+decale]-M[i][499+decale+1]
if diff>=3:
M[i][499+decale]-=floor(19*diff/20)
M[i][499+decale+1]+=floor(19*diff/20)
for decale in range (500): #Idem
diff=M[i][500-decale]-M[i][500-decale-1]
if diff>=3:
M[i][500-decale]-=floor(19*diff/20)
M[i][500-decale-1]+=floor(19*diff/20)
return M
【问题讨论】:
-
在您的应用程序上下文中,smooth 是什么意思?
-
有没有机会考虑使用 Numpy?
标签: python arrays python-2.7