Векторизация np.random.binomial для принятия многомерного массива - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть массив, скажем, трехмерный размер (3,3,3):

M = np.arange(27).reshape((3,3,3))

Что я хотел бы достичь, это применить функцию numpy.random.binomial,как:

X[i,j,k] = (n=M[i,j,k], p=0.5 , size=1)

Это должно быть легко с for циклами, но для больших массивов не самая лучшая идея.

Возможное решение будет:

def binom(x):
   fis = int(np.random.binomial(x,p=0.5,size=1))
   return fis

X = np.vectorize(binom)(M)

Работает нормально, но np.vectorize в основном хорошо замаскированный for эквивалент, так что не так уж много улучшений для больших массивов.Я уверен, что есть более дешевые и быстрые решения.

1 Ответ

0 голосов
/ 27 февраля 2019

Похоже, что это работает путем прямой передачи числа выборок в виде многомерного массива в np.binomial() (по крайней мере, для numpy версии 1.13.3):

In [1]: n = np.arange(27).reshape((3,3,3))
In [9]: np.random.binomial(n,p=0.5)
Out[9]: 
array([[[ 0,  1,  1],
        [ 1,  3,  3],
        [ 3,  3,  4]],

       [[ 2,  5,  4],
        [ 4,  7,  7],
        [ 9,  9,  9]],

       [[ 4,  9, 10],
        [14, 16, 12],
        [15, 15, 13]]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...