2014-10-14 2 views
2

방향 0으로 2-d 랜덤 보행을 시뮬레이션하려고합니다. < θ < 2π 및 T = 1000 단계.중간 값을 numpy 배열로 저장

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

왜 2 차원 배열? – njzk2

+0

숫자가 작은 배열의 크기가 잘못되었습니다. 'a = np.zeros ((1000,2)) ', 즉 1000 개의 2D 점을 원합니다. 또한 최소한의 완전한 코드 조각, 즉 잘라 내기 및 붙여 넣기를 할 수있는 코드를 게시하십시오. 예를 들어'a [i, j] = randwalk (x, y)'라는 줄에서'x'와'y'는 무엇입니까? – tom10

답변

1

주요 명백한 문제는 1000x1000 배열이 아닌 1000 개 지점의 2D 배열을 원한다는 것입니다. 예를 들어, 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

+0

이것은 완벽합니다. 감사합니다. –

0

당신은 아마

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

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

같은 여기 NumPy와 불필요를 원한다.

0

유형 오류가 발생했습니다. randwalk는 2-tuple을 반환하고 float이 필요한 배열 요소를 설정하려고합니다.

우선 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 

매개 변수 값을 수정하고 있지만 통화별로 누적되지는 않습니다.