我正在查找分布之间的海林格距离的一些公式,我发现了一个(在 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 语句?我的意思是..这到底是如何运作的?
我对距离测量有一个误解,因此我制作了一个笔记本,其中包含海灵格距离的一些实现。
关于您的问题,该构造称为列表理解,反斜杠仅用于行延续。
这是一个没有列表理解的可能列表:
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)