2017-03-16 6 views
1

저는 하나의 연습을 완료하는 데 도움이 필요한 파이썬의 새로운 사용자 프로그래밍입니다. x와 y에 대해 -10에서 10 사이의 임의의 숫자를 생성하기 전에 다음 두 가지 요구 사항을 충족시키지 않는 x와 y를 확인해야합니다. np.sqrt (x^2 + y^2) < x 및 y의 절대 값이 5보다 큰 경우 어떻게이 두 조건을 플롯에 삽입 할 수 있습니까?두 가지 조건을 가진 산란 플롯 난수 (플롯은 내부에 사각형 구멍이있는 퍼지 원처럼 보입니다)

조건 :

np.sqrt(x**2 + y**2) < 10 
abs(x),abs(y) > 5 

나는 다음과 같이 시작합니다

import numpy as np 
import matplotlib.pyplot as plt 
N=2000 
x = np.random.uniform(-10,10,N) 
y = np.random.uniform(-10,10,N) 

a = np.zeros(np.size(x), dtype=bool) 
b = np.sqrt(x**2+y**2) 

for i in range(np.size(x)): 
    if (b[i] < 10): 
     a[i] = True 
x = x[a] 
y = y[a] 

plt.plot(x,y, "b o") 
plt.show() 

사전에 대단히 감사합니다!

이 위의 편집 코드이지만, 나는 여전히 x와 y보다 높은 5를 어디 조건을 충족 할 필요가 -5

+0

어떻게이 두 가지 요구 사항을 동시에 유지할 수 있습니까? abs (x)와 abs (y)가 5보다 크면 np.square (x ** 2 + y ** 2)> 10이됩니다. –

+0

x와 y가 -5와 5의 범위에 있다고 생각합니다. . 그리고 np.sqrt (x2 + y2)를 만족하는 솔루션은 npy로 numpy를 사용하여 솔루션을 찾고 싶었습니다. 나는 그것이 어렵지 않다고 생각하지만이 조건을 구현하는 데 어려움을 겪고 있습니다 ... – Jan

답변

0
import numpy as np 
import matplotlib.pyplot as plt 
N=2000 
x = np.random.uniform(-10,10,N) 
y = np.random.uniform(-10,10,N) 

a = np.zeros(np.size(x), dtype=bool) 
b = np.sqrt(x**2+y**2) 

for i in range(np.size(x)): 
    if (max(abs(x[i]), abs(y[i]))>5) & (b[i] < 10): 
     a[i] = True 
    else: 
     a[i] = False 
x = x[a] 
y = y[a] 

plt.plot(x,y, "b o") 
plt.show() 

should look like this!!!

감사 사진 작업을 코드로 위의 번역 몇 가지 파이썬을 가르쳐 모두! 오류가 발생했습니다.

0

의사 코드

var maxpoints = 2000 
var ptx[maxpoints] 
var pty[maxpoints] 

for (num = 0; num < maxpoints; num++) { # 

    do { 

     trialx = np.random.uniform(-10,10,N) # create a new x 
     trialy = np.random.uniform(-10,10,N) # create a new y 

    } while (! ((math.sqrt(trialx**2 + trialy**2) < 10) && 
       (math.abs(trialx) > 5 && math.abs(trialy) > 5))) 

    ptx[num] = trialx   
    pty[num] = trialy 

} 

는 기본적으로 내부를 계속할 것 당신의 제한을 만족시키는 다음 x와 y를 발견 할 때까지 반복합니다 ... 원을 만드는 것에 대한 제한은 당연히 제곱근 (x^2 + y^2)가 아닌 제곱근 (x^2 + y^2)) ... @Jan이 내용을 명확히하고 질문을 업데이트하십시오.

갱신 나 자신에게

from array import array 
import numpy as np 
import matplotlib.pyplot as plt 

circle_radius = 10 

maxpoints = 2000 
ptx = np.zeros(maxpoints) 
pty = np.zeros(maxpoints) 

seedval = circle_radius + 1 

for num in range(0,maxpoints): 

    trialx = seedval 
    trialy = seedval 

    while (not (((np.sqrt(trialx*trialx + trialy*trialy) < circle_radius)) and 
       (np.abs(trialx) > 5 and np.abs(trialy) > 5))) : 

     trialx = np.random.uniform(-circle_radius,circle_radius) # create a new x 
     trialy = np.random.uniform(-circle_radius,circle_radius) # create a new y 

     print "current trial ", trialx, trialy 

    ptx[num] = trialx   
    pty[num] = trialy 

    print num, trialx, trialy 


plt.plot(ptx, pty, 'ro') 
plt.show() 

그래서 위의이 음모를 생성합니다

+0

Scott,하지만이 코드는 제 작업을하지 않았습니다. 그리고 나는 var와 trial x와 y에 익숙하지 않다 ... – Jan

+0

에센스를주는 의사 코드 ...이 접근법을 취해서 약간의 파이썬을 돌린다. –

+0

네, 제곱근을 의미합니다. 아마 이것은 나의 실수 중 하나였습니다. 당신은 그 사람입니다! – Jan