如何优化for循环以在python中生成新的随机Poisson数组?

时间:2017-10-13 19:27:48

标签: python loops numpy random

我想要读取灰度图像,说出具有(248,480,3)形状的东西,然后使用它的每个元素作为用于产生泊松随机值的lam值,并为每个元素执行此操作并创建新数据设置相同的形状。我想和nscan这样做,然后我想将它们全部加在一起并将它们放在一个新的数据集中并再次绘制它以获得类似于我在开头放置的第一个图像的东西。这段代码正在运行,但速度极慢,我想知道是否有办法让它更快?

import numpy as np
import matplotlib.pyplot as plt

my_image = plt.imread('myimage.png')


def genP(data):

    new_data = np.zeros(data.shape)

    for i in range(data.shape[0]):

        for j in range(data.shape[1]):

            for k in range(data.shape[2]):

                new_data[i, j, k] = np.random.poisson(lam = data[i, j, k])


    return new_data        



def get_total(data, nscan = 1):

    total = genP(data)

    for i in range(nscan):

        total += genP(data)

    total = total/nscan


    plt.imshow(total)
    plt.show()


get_total(my_image, 100) 

1 个答案:

答案 0 :(得分:1)

numpy.random.poisson可以完全取代您的genP()功能...基本上可以保证更快。

  

如果size为None(默认值),则如果lam是标量,则返回单个值。否则,绘制np.array(lam).size样本

def get_total(data, nscan = 1):
    total = np.random.poisson(lam=data)
    for i in range(nscan):
        total += np.random.poisson(lam=data)
    total = total/nscan
    plt.imshow(total)
    plt.show()