python - 向量化 np.random.binomial 以接受多维数组

标签 python arrays numpy random vectorization

我有一个数组,假设是一个大小为 (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/

相关文章:

python - 如何中断 Mac 上后台运行的 python 脚本?

python - 如何打包适用于iOS的Kivy应用程序?

python - 用 Python Mechanize 模块填充文本区域

python - 如何将 Python 包作为预定的守护进程运行?

javascript - 解析 JSON - 数组的 json 数组

regex - 如何将正则表达式与任何数组运算符一起使用

python - 使用 numpy.loadtxt 解析包含 HH :MM:SS. mmm 次的数据矩阵

javascript - 将对象数组减少为对象

Python Pandas : How to broadcast an operation using apply without writing a secondary function

基于数据集中先前数字的 Pandas DataFrame 编号