在numpy数组中存储中间值

时间:2014-10-14 16:57:39

标签: python numpy random-walk

我正在尝试模拟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)

但这似乎根本不起作用。

3 个答案:

答案 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()

enter image description here

答案 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

如您所知,您正在修改参数值,但它们不会在通话时累积。