我需要创建一组具有两个要求的100个随机2D点。 答:点必须在具有特定尺寸的矩形内。 B:积分必须满足条件;例如,给定某个生成点的坐标x和y,x + y <2。
我能够在矩形内生成一组点:
xyMin = [xMin, yMin]
xyMax = [xMax, yMax]
data = np.random.uniform(low=xyMin, high=xyMax, size=(100,2))
如何添加第二个条件?我可以使用while循环,每个循环生成一个点并检查条件。如果满足条件,则增加计数器并转到下一个点,直到索引等于100。否则,在不增加索引的情况下在下一个循环中重试。
使用列表理解是否有可能获得相同的结果?
答案 0 :(得分:1)
这是比一次生成一对更快的方法。它只是重新生成所有在第二个条件下失败的对,直到不存在任何失败为止。
xyMin = 1.1
xyMax = 0.9
data = np.random.uniform(low=xyMin, high=xyMax, size=(100,2))
while True:
failures = data.sum(axis=1)>=2
n = failures.sum()
if n>0:
data[failures] = np.random.uniform(low=xyMin, high=xyMax, size=(n,2))
else:
break
也就是说,请研究此question from stackexchange mathematics。会有更好的方法。您可以像这样在三角形x+y<2
中生成点:
A = np.array([0,0])
B = np.array([2,0])
C = np.array([0,2])
r1,r2 = np.random.random(size=(2,100,1))
points = (1-np.sqrt(r1))*A + (np.sqrt(r1)*(1-r2))*B + r2*np.sqrt(r1)*C
答案 1 :(得分:0)