矢量化np.随机.二项式用于接受多维数组

2024-10-05 12:24:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数组,让我们说一个三维的大小(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等价物,因此对于较大的数组没有太大的改进。 我确信有更便宜更快的解决方案。你知道吗


Tags: 函数numpyforsizenprandom数组主意
1条回答
网友
1楼 · 发布于 2024-10-05 12:24:31

这似乎是通过将样本数作为多维数组直接传递给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]]])

相关问题 更多 >

    热门问题