Python 纽约市的建模和地图显示:病毒模拟
所以我完成了代码的编写,以显示纽约地图的图像,应该是这样的 但根据我现有的代码:Python 纽约市的建模和地图显示:病毒模拟,python,matplotlib,Python,Matplotlib,所以我完成了代码的编写,以显示纽约地图的图像,应该是这样的 但根据我现有的代码: import random import string import math from matplotlib import pyplot as plt def normpdf(x, mean, sd): """ Return the value of the normal distribution with the specified mean and standard deviation (sd) at
import random
import string
import math
from matplotlib import pyplot as plt
def normpdf(x, mean, sd):
"""
Return the value of the normal distribution
with the specified mean and standard deviation (sd) at
position x.
You do not have to understand how this function works exactly.
"""
var = float(sd)**2
denom = (2*math.pi*var)**.5
num = math.exp(-(float(x)-float(mean))**2/(2*var))
return num/denom
recovery_time = 4 # recovery time in time-steps
virality = 0.2 # probability that a neighbor cell is infected in
# each time step
class Cell(object):
def __init__(self,x, y):
self.x = x
self.y = y
self.state = "S" # can be "S" (susceptible), "R" (resistant = dead), or
# "I" (infected)
def infect(self):
pass
class Map(object):
cells_list = []
def __init__(self):
self.height = 150
self.width = 150
self.cells = {}
def add_cell(self, cell):
self.cells_list.append((cell.x, cell.y))
self.cells_list.append(cell.state)
def display(self):
colors = []
for y in range(150):
for x in range(150):
if (x, y) in self.cells:
if self.cells[(x,y)] in "S":
colors.append((0.0,1.0, 0.0))
elif self.cells[(x, y)] in "R":
colors.append((0.5, 0.5, 0.5))
else:
colors.append((1.0, 0.0, 0.0))
else:
colors.append((0.0,0.0,0.0))
plt.imshow(colors)
def adjacent_cells(self, x,y):
pass
def read_map(filename):
m = Map()
coordinates = open(filename, 'r')
coordinates_list = coordinates.readlines()
for l in coordinates_list:
line = l.strip()
split_coords = line.split(',')
c = Cell(split_coords[0], split_coords[1])
m.add_cell(c)
# ... Write this function
return m
read_map('nyc_map.txt').display()
我得到了这个图像:
顺便说一下,我们的地图是150 x 150的网格;要创建图像,我必须使用列表列表,您的代码有很多错误:
- 几个缩进错误
是一个长度为3的150*150元组列表,但是colors
的输入应该是一个大小为150150,3的数组imshow
- “S”中的
self.cells[(x,y)]检查
的内容是否包含在字符串self.cells[(x,y)]
中,只有当“S”
时,该值才能为真self.cells[(x,y)]==“S”
用self.cells
初始化,并且从不在其他地方设置,因此条件始终为false{}
要求self.cells[(x,y)]
和x
为整数,但是y
在创建单元格时使用字符串Cell(拆分坐标[0],拆分坐标[1])
from matplotlib import pyplot as plt
import numpy as np
class Cell(object):
def __init__(self,x, y):
self.x = x
self.y = y
self.state = "S" # can be "S" (susceptible), "R" (resistant = dead), or
# "I" (infected)
class Map(object):
def __init__(self):
self.cells = {}
def add_cell(self, cell):
self.cells[(cell.x, cell.y)] = cell.state
def display(self):
colors = np.zeros((150,150,3))
for y in range(150):
for x in range(150):
if (x, y) in self.cells:
if self.cells[(x,y)] == "S":
colors[x,y,:] = (0.0,1.0, 0.0)
else:
colors[x, y, :] = (0.0,0.0,0.0)
plt.imshow(colors)
plt.show()
def read_map(filename):
m = Map()
coordinates = open(filename, 'r')
coordinates_list = coordinates.readlines()
for l in coordinates_list:
line = l.strip()
split_coords = line.split(',')
c = Cell(int(split_coords[0]), int(split_coords[1]))
m.add_cell(c)
# ... Write this function
return m
read_map('nyc_map.txt').display()
谢谢你花时间帮我找出哪里出了问题!