我想知道如何使以下代码更短和/或更有效。我可以(或者应该)通过使用函数方法摆脱for循环,还是应该从numpy中使用方法?

该代码计算整数数组的期望值。

vals = np.arange(self.n+1)

# array of probability of each value in vals
parr = np.ones(len(vals))
for i in range(len(vals)):
    parr[i] *= self.prob(vals[i])

return np.dot(vals,parr)


根据评论中的要求,方法prob()的实现:

def prob(self, x):

    """Computes probability of removing x items

    :param x: number of items to remove
    :returns: probability of removing x items
    """

    # p is the probability of removing an item
    # sl.choose computes n choose x
    return sl.choose(self.n, x) * (self.p**x) * \
           (1-self.p)**(self.n-x)

最佳答案

循环可以简化为列表理解:

vals = np.arange(self.n+1)

# array of probability of each value in vals
parr = [self.prob(v) for v in vals]

return np.dot(vals, parr)

关于python - 如何优化numpy调用的数据生成,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41418442/

10-12 18:54