如何在Numpy 2D随机列表中添加条件

时间:2019-05-25 14:21:11

标签: python numpy

我需要创建一组具有两个要求的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。否则,在不增加索引的情况下在下一个循环中重试。

使用列表理解是否有可能获得相同的结果?

2 个答案:

答案 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)

以下是使用一些猜测值的示例答案

import numpy as np
import matplotlib.pyplot as plt

xyMin = [0, 0]
xyMax = [3, 3]

data = np.random.uniform(low=xyMin, high=xyMax, size=(10000,2))
mask = (np.sum(data, axis=1)<2)
data = data[mask]
plt.scatter(data[:, 0], data[:,1])
plt.show()

enter image description here