我有一个数组,假设是一个大小为 (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
等效项,所以对于较大的数组来说没有太大的改进。
我确信有更便宜、更快的解决方案。
最佳答案
这似乎是通过将样本数作为多维数组直接传递给 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]]])
关于python - 向量化 np.random.binomial 以接受多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54894634/