我正在查找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语句?我的意思是......这怎么工作呢?
答案 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)