Мне нужно написать функцию в Python 3, которая возвращает массив позиций (x, y) в прямоугольном поле (например, 100x100 точек), которые разбросаны в соответствии с однородным пространственный пуассоновский процесс.Пуассоновский точечный процесс в Python 3 с numpy, без scipy
До сих пор я нашел этот ресурс с кодом Python, но, к сожалению, я не могу найти/установить SciPy для Python 3:
http://connor-johnson.com/2014/02/25/spatial-point-processes/
Это помогло мне понять, что точечный процесс Пуассона на самом деле и как это работает.
Я играю с numpy.random.pisson какое-то время, но мне сложно интерпретировать то, что он возвращает.
http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.poisson.html
>>> import numpy as np
>>> np.random.poisson(1, (1, 5, 5))
array([[[0, 2, 0, 1, 0],
[3, 2, 0, 2, 1],
[0, 1, 3, 3, 2],
[0, 1, 2, 0, 2],
[1, 2, 1, 0, 3]]])
То, что я думаю, что команда делает создает один 5x5 поля = (1, 5, 5) и рассеивающие объекты со скоростью лямбды = 1 над этой областью. Числа, отображаемые в полученной матрице, - это вероятность того, что объект находится в этой конкретной позиции.
Как я могу рассеять, скажем, десять объектов над этим полем 5x5 в соответствии с однородным пространственным пуассоновским процессом? Мое первое предположение состояло в том, чтобы перебирать весь массив и вставлять объект в каждую позицию с «3», затем на каждую другую позицию с «2» и т. Д., Но я не уверен в реальной вероятности I следует использовать, чтобы определить, должен ли быть вставлен объект или нет.
В соответствии со следующим ресурсом я могу моделировать 10 объектов, которые разбросаны по полю со скоростью 1, просто умножая скорость и количество объектов (10 * 1 = 10) и используя это значение в качестве моей лямбды, т. Е.
>>> np.random.poisson(10, (1, 5, 5))
array([[[12, 12, 10, 16, 16],
[ 8, 6, 8, 12, 9],
[12, 4, 10, 3, 8],
[15, 10, 10, 15, 7],
[ 8, 13, 12, 9, 7]]])
Однако я не вижу, как это должно облегчить ситуацию. Я только увеличиваю скорость, с которой объекты появляются на 10.
Poisson point process in matlab
Подводя итог, мой основной вопрос: Как я могу использовать numpy.random.poisson(lam, size)
моделировать ряд n
объектов, рассеиваясь по 2-мерной области dx*dy
?
Я могу очень смутить здесь, но разве вы не хотите, чтобы 'x, y = np.random.pisson (lam, (2, n))'? –
Это просто вернет два (одномерных) массива со случайным распределением пуассонов: '' '>>> np.random.poisson (1, (2, 10))' '' возвращает '' 'массив [[[ 1, 2, 1, 1, 0, 2, 0, 1, 0, 2], [0, 3, 1, 1, 3, 0, 2, 1, 0, 2]]) '' ' Что Я ищу, хотя это способ интерпретировать такие значения как _actual_ objects. Я думаю, что проще объяснить это так: Представьте себе поле размером 10 см x 10 см. Предположим, что поле находится на открытом воздухе, и идет дождь. Капли дождя падают в соответствии с однородным точечным процессом Пуассона. Я просто хочу узнать, где первые десять капель дождя будут падать именно на этом поле. – GeckStar