Как добавить условие в случайный список Numpy 2D - PullRequest
0 голосов
/ 25 мая 2019

Мне нужно создать набор из 100 случайных 2D точек с двумя требованиями. A: точки должны быть внутри прямоугольника с определенными размерами. B: точки должны удовлетворять условию; например, учитывая координаты x и y определенной сгенерированной точки, x + y <2. </p>

Я могу создать набор точек внутри прямоугольника:

xyMin = [xMin, yMin]
xyMax = [xMax, yMax]

data = np.random.uniform(low=xyMin, high=xyMax, size=(100,2))

Как мне добавить второе условие? Я мог бы использовать цикл while, генерируя одну точку за цикл и проверяя условие. Если условие выполнено, увеличьте счетчик и переходите к следующей точке, пока индекс не станет равным 100. Если нет, попробуйте снова в следующем цикле без увеличения индекса.

Можно ли достичь того же результата, используя понимание списка?

Ответы [ 2 ]

1 голос
/ 25 мая 2019

Вот более быстрый способ, чем генерировать пары по одной за раз. Он просто заново генерирует все пары, которые не выполняют второе условие, пока не останется никаких сбоев.

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

Тем не менее, изучите этот вопрос из стека обмена математики . Там будет намного лучший способ. Вы можете генерировать точки в треугольнике 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
0 голосов
/ 25 мая 2019

Вот пример ответа с использованием некоторых значений догадок

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...