2

我正在尝试模拟二维随机游走,方向 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)

如何将所有中间坐标存储在 a 中?我最初尝试以下形式:

for i in range(1000):
    for j in range(1000):
        a[i,j] = randwalk(x,y)

但这似乎根本不起作用。

4

3 回答 3

1

主要的明显问题是您想要一个 1000 点的二维数组,而不是 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()

在此处输入图像描述

于 2014-10-14T17:30:09.503 回答
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

正如你所拥有的,你正在修改参数的值,但它们不是从调用到调用累积的。

于 2014-10-14T17:29:07.903 回答
0

你可能想要类似的东西

T = 1000
a = [(0,0)] * T

for i in range(1, len(a)):
    a[i] = randwalk(*a[i - 1])

这里不需要 numpy。

于 2014-10-14T17:08:53.797 回答