我是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的条件
答案 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()
谢谢大家!我发现了错误