大佬们,求解这个程序的每个function是啥意思,我实在是看不太懂……
事情是这样的,我们老师要我们写一个关于疾病传播的程序,用的是python,然后她给了一个代码给我们
from neighbour import von_neumann
import numpy as np
import matplotlib.pyplot as plt
import random
def distribute(grid, num_r, num_c, numpeep):
for i in range(numpeep):
rpos = random.randint(0, num_r-1)
cpos = random.randint(0, num_c-1)
grid[rpos, cpos] += 1
def makeScatter(grid, num_r, num_c):
r_values = []
c_values = []
count_values = []
for row in range(num_r):
for col in range(num_c):
if grid[row,col] > 0:
r_values.append(row)
c_values.append(col)
count_values.append(grid[row,col]*100)
return(r_values, c_values, count_values)
def displayGrid(grid, num_r, num_c):
for row in range(num_r-1, -1, -1):
for col in range(num_c):
print(grid[row,col], end=" ")
print()
def plotGrids():
plt.figure(figsize = (7,7))
Irows, Icols, Icount = makeScatter(infected, NUM_ROWS, NUM_COLS)
plt.scatter(Icols, Irows, s=Icount, c="r", alpha=0.5)
Urows, Ucols, Ucount = makeScatter(uninfected, NUM_ROWS, NUM_COLS)
plt.scatter(Ucols, Urows, s=Ucount, c="b", alpha=0.5)
plt.show()
def movePeeps(cur, next, r, c):
for peep in range(cur[r,c]):
rMove = random.randint(-1,1)
cMove = random.randint(-1,1)
if (r + rMove) > (NUM_ROWS-1) or (r + rMove) < 0:
rMove = 0
if (c + cMove) > (NUM_COLS-1) or (c + cMove) < 0:
cMove = 0
next[r + rMove, c + cMove] +=1
def infect(inf, notinf, r, c, prob):
prob = prob * inf[r,c]
if prob:
for peep in range(notinf[r,c]):
if random.random() < prob:
inf[r, c] +=1
notinf[r, c] -=1
print("***** New infection (", r, ",", c, ")")
INIT_POP = 100
INIT_INFECTED = 5
INIT_DEAD = 0
NUM_COLS = 15
NUM_ROWS = 10
NUM_STEPS = 10
infected = np.zeros((NUM_ROWS, NUM_COLS), dtype=np.int)
uninfected = np.zeros((NUM_ROWS, NUM_COLS), dtype=np.int)
distribute(infected, NUM_ROWS, NUM_COLS, INIT_INFECTED)
distribute(uninfected, NUM_ROWS, NUM_COLS, INIT_POP)
displayGrid(infected, NUM_ROWS, NUM_COLS)
print()
displayGrid(uninfected, NUM_ROWS, NUM_COLS)
plotGrids()
for timestep in range(NUM_STEPS):
print("\n###################### TIMESTEP", timestep, "#####################\n")
infected2 = np.zeros((NUM_ROWS, NUM_COLS), dtype=np.int)
uninfected2 = np.zeros((NUM_ROWS, NUM_COLS), dtype=np.int)
for row in range(NUM_ROWS):
for col in range(NUM_COLS):
infect(infected, uninfected, row, col, 0.5)
movePeeps(infected, infected2, row, col)
movePeeps(uninfected, uninfected2, row, col)
infected = infected2
uninfected = uninfected2
plotGrids()
print("Done")
她的作业要起我们添加死亡人数,康复人数,并且用画图的形式表现出来,但是第一步我就卡住了,根本看不懂她的这一串代码是啥。。
求大神详解这些函数是什么意思。
对了,她还要求我们用Moore或者Von_neumann的函数来作为传播的方式,那个我已经写好了,但是不知道该怎么用进来……
#von neumann method is to infect patients for 4 directions:
#north, south, west, east
#
def von_neumann(table):
von_neumann_method = []
for (x,y) in table:
von_neumann_method.append((x,y)) # it is the causative agent
von_neumann_method.append((x-1,y))
von_neumann_method.append((x,y-1))
von_neumann_method.append((x+1,y))
von_neumann_method.append((x,y+1))
return von_neumann_method
求大神啊,不求讲怎么做这个作业,只求讲解一下这些是什么意思就好了……