模擬傳播這裏是低效的Python代碼我有:numpy的:如何在晶格
import numpy as np
import random
matrix = np.empty((100,100), dtype=bool)
matrix[:,:] = False
matrix[50,50] = True
def propagate(matrix, i, j):
for (di,dj) in [ (1,0), (0,1), (-1,0), (0,-1) ]:
(ni,nj) = (i+di, j+dj)
if matrix[ni,nj] and flip_coin_is_face():
matrix[i,j] = True
def flip_coin_is_face():
return random.uniform(0,1) < 0.5
for k in xrange(1000):
for i in xrange(1,99):
for j in xrange(1,99):
propagate(matrix, i, j)
基本上從基體的中心傳播的真實狀態。由於我在Python中編碼循環和傳播規則,所以這當然非常慢。
我的問題是,我怎樣才能使用Numpy索引來儘可能快地做到這一點?
我運行了你的代碼,它以[0,0]爲True且其餘全部爲假的矩陣結束。當然,這不是你想要的? –
@JohnZwinck基於'從矩陣的中心傳播真實狀態'我想它應該是'矩陣[50,50] =真'而不是'矩陣[0,0] =真' – alko
@JohnZwinck at-alko你是對的。 – dsign