带有两个条件的散点图随机数(图表看起来像一个内部有方孔的模糊圆圈)

时间:2017-03-16 20:23:44

标签: python matplotlib plot scatter multiple-conditions

我是python中的新用户编程,需要一些帮助来完成一个练习。 在我为x和y生成介于-10和10之间的2000个随机数之前,我需要确保不满足这两个要求的x和y已经输出: np.sqrt(x ^ 2 + y ^ 2)< 10 当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的条件

2 个答案:

答案 0 :(得分: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

}

基本上继续内部while循环,直到你发现满足你的限制的下一个x和y ...创建一个圆的限制自然会做一个平方根(x ^ 2 + y ^ 2)而不是square( x ^ 2 + y ^ 2)... @Jan请澄清并更新您的问题

更新 我自学了一些python,将上面的内容翻译成带图片的工作代码

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

所以上面会生成这个情节

答案 1 :(得分: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!!!

谢谢大家!我发现了错误