Я пытаюсь изобразить частоты двумерного целочисленного случайного блуждания, начиная с (0,0). Сначала я получаю список координат (x, y), некоторые из которых отрицательны, и у меня возникают проблемы с их правильным построением. Я знаю, что моя текущая попытка неверна, так как (0,0) иногда выглядит так, будто его вообще нет в случайном блуждании.
Вот моя попытка:
Идея состоит в том, чтобы переставить все (x , y) -координаты, поэтому они находятся в первом квадранте, а затем манипулируют осями на extent
, чтобы вернуть их обратно в исходную форму. Я делаю это, чтобы избежать нежелательных операций со списком при построении grid
, которые заставили бы график «прыгать»
# generate random walk
import random
def random_walk():
a = 0
b = 0
while True:
yield (a, b)
i = random.choice([0, 1])
if i == 0:
a = random.choice([a-1, a+1])
else:
b = random.choice([b-1, b+1])
И попытка построения самого себя:
import matplotlib.pyplot as plt
import itertools
import numpy as np
# generate random walk of length 1000
walk = list(itertools.islice(random_walk(), 0, 1000))
xy = list(zip(*walk))
x = list(xy[0])
y = list(xy[1])
ext = (min(x), max(x), min(y), max(y))
min_x = min(x)
min_y = min(y)
# transpose all x.- and y.-coordinates:
for i in range(len(x)):
x[i] -= min_x
for i in range(len(y)):
y[i] -= min_y
walk_new = list(zip(x,y))
grid = np.zeros((max(x) + 1, max(y) + 1))
# Put frequencies in grid:
for a,b in walk_new:
grid[a][b] += 1
plt.imshow(grid)
plt.colorbar()