Python Hellinger公式解释

时间:2017-08-17 17:46:00

标签: python for-loop

我正在查找Hellinger发行版之间距离的一些公式,我发现一个(在Python中)我从未见过类似的格式。我很困惑它是如何运作的。

def hellinger(p,q):
    """Hellinger distance between distributions"""
    return sum([(sqrt(t[0])-sqrt(t[1]))*(sqrt(t[0])-sqrt(t[1]))\
                for t in zip(p,q)])/sqrt(2.)

我之前从未见过这种......格式。他们除以for语句?我的意思是......这怎么工作呢?

1 个答案:

答案 0 :(得分:2)

我有一个距离测量的faible,因此我做了一个notebook与Hellinger距离的一些实现。

关于你的问题,构造被称为list comrehension,反斜杠只是用于行继续。

这是一个没有列表理解的可能列表:

def hellinger_explicit(p, q):
    """Hellinger distance between two discrete distributions.
       Same as original version but without list comprehension
    """
    list_of_squares = []
    for p_i, q_i in zip(p, q):

        # caluclate the square of the difference of ith distr elements
        s = (math.sqrt(p_i) - math.sqrt(q_i)) ** 2

        # append 
        list_of_squares.append(s)

    # calculate sum of squares
    sosq = sum(list_of_squares)    

    return sosq / math.sqrt(2)