Python Hellinger公式解释

use*_*388 5 python for-loop

我正在查找分布之间的海林格距离的一些公式,我发现了一个(在 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.)
Run Code Online (Sandbox Code Playgroud)

我以前从未见过这种...格式。他们除以 for 语句?我的意思是..这到底是如何运作的?

Max*_*ers 4

我对距离测量有一个误解,因此我制作了一个笔记本,其中包含海灵格距离的一些实现。

关于您的问题,该构造称为列表理解,反斜杠仅用于行延续。

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

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)
Run Code Online (Sandbox Code Playgroud)