2015-06-30 2 views
4

Мне нужно написать функцию в 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?

+0

Я могу очень смутить здесь, но разве вы не хотите, чтобы 'x, y = np.random.pisson (lam, (2, n))'? –

+0

Это просто вернет два (одномерных) массива со случайным распределением пуассонов: '' '>>> 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

ответ

0

Кажется, я неправильно рассмотрел проблему. После нескольких автономных исследований я обнаружил, что это на самом деле достаточно, чтобы создать случайное значение Пуассона, которое представляет количество объектов, например n = np.random.poisson(100) и создать такое же количество случайных значений между 0 и 1

x = np.random.rand(n) 
y = np.random.rand(n) 

Теперь я просто нужно объединить два массива x- и y-значений в массив (x, y) кортежей. Это случайные позиции, которые я искал. Я могу умножить каждое значение x и y на боковую длину моего поля, например. 100, чтобы масштабировать значения в поле 100x100, которое я хочу отобразить.

Я думал, что «случайность» этих позиций должна определяться случайным пуассоновским процессом, но кажется, что только номер позиций должен определяться им, а не фактическими позиционными значениями.

 Смежные вопросы

  • Нет связанных вопросов^_^