您可以为此使用numba(可以添加nopython=True或使用静态类型以获得更多加速):from numba import jit
import numpy as np
n = 200
size = (n,n)
x = np.zeros(size)
m = 0 # mean
if n%2 == 0:
m = int((n+1)/2)
else :
m = int(n/2)
x[m][m] = 100000
z = int(x[m][m])
def f(x):
count = 0
for i in range(0,n):
for j in range(0,n):
if x[i][j] > 3:
x[i][j] = x[i][j] - 4
if i-1 >= 0 :
x[i-1][j] = x[i-1][j] + 1
if i+1 < n :
x[i+1][j] = x[i+1][j] + 1
if j-1 >= 0 :
x[i][j-1] = x[i][j-1] + 1
if j+1 < n :
x[i][j+1] = x[i][j+1] + 1
elif x[i][j] <= 3:
count = count + 1
return x, count
@jit
def f_jit(x):
count = 0
for i in range(0,n):
for j in range(0,n):
if x[i][j] > 3:
x[i][j] = x[i][j] - 4
if i-1 >= 0 :
x[i-1][j] = x[i-1][j] + 1
if i+1 < n :
x[i+1][j] = x[i+1][j] + 1
if j-1 >= 0 :
x[i][j-1] = x[i][j-1] + 1
if j+1 < n :
x[i][j+1] = x[i][j+1] + 1
elif x[i][j] <= 3:
count = count + 1
return x, count
%%timeit
f(x)
28.7 ms ± 602 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
%%timeit
f_jit(x)
59.9 µs ± 7.22 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)