我正在尝试模拟2-d随机游走,方向0< θ< 2π和T = 1000步。
a=np.zeros((1000,1000))
def randwalk(x,y):
theta=2*math.pi*rd.rand()
x+=math.cos(theta);
y+=math.sin(theta);
return (x,y)
如何将所有中间坐标存储在?我最初尝试的形式是:
for i in range(1000):
for j in range(1000):
a[i,j] = randwalk(x,y)
但这似乎根本不起作用。
答案 0 :(得分:1)
主要的明显问题是你想要一个1000点的2D数组,而不是1000x1000数组。例如,您说您想要执行1000步,但您的嵌套循环需要1,000,000。
import numpy as np
import matplotlib.pyplot as plt
import random as rd
import math
a=np.zeros((1000,2), dtype=np.float)
def randwalk(x,y):
theta=2*math.pi*rd.random()
x+=math.cos(theta);
y+=math.sin(theta);
return (x,y)
x, y = 0., 0.
for i in range(1000):
x, y = randwalk(x,y)
a[i,:] = x, y
plt.figure()
plt.plot(a[:,0], a[:,1])
plt.show()
答案 1 :(得分:0)
你可能想要像
这样的东西T = 1000
a = [(0,0)] * T
for i in range(1, len(a)):
a[i] = randwalk(*a[i - 1])
这里不需要numpy。
答案 2 :(得分:0)
您遇到了类型错误。 randwalk返回一个2元组,你正试图设置一个数组元素,其中浮动是预期的。
首先,您不需要1000 x 1000阵列。这将提供一百万个数据点,你只需要2000.我认为你想要的是这样的:
xs = np.zeros((1000))
ys = np.zeros((1000))
x = 0
y = 0
for i in range(1000):
xs[i], ys[i] = randwalk()
另外,应该更改randwalk的定义以不使用参数,并创建x和y全局变量:
def randwalk():
global x, y
如您所知,您正在修改参数值,但它们不会在通话时累积。