我在Python中有一个函数,该函数可以按如下方式计算多个参数的熵,我称之为ps
def H(*ps):
sum = 0.0
for pi in ps:
sum = sum - pi*np.log2(pi)
return sum
我希望能够将多个参数作为列表或元组传递,即H([x])
,但这不能给出正确的结果,而是计算H(xi)
的值并返回一个元组每个结果。由于函数的性质,我能够对元组的每个元素求和以获得正确的结果,但是我宁愿能够使函数给出所需的输出以方便使用。如果输入H(x1, x2, ...)
,该函数将提供正确的输出。
如果有人有任何建议,请告诉我。
谢谢。
编辑:
样本输入和输出:
x = [0.1, 0.2]
print H(0.1, 0.2), H(x)
0.796578428466 [ 0.33219281 0.46438562]
答案 0 :(得分:4)
请勿在函数定义中通过*
运算符解压缩。您已经在通过for
循环来迭代列表。将iterable用作函数参数是很自然的。
def H(ps):
x = 0.0
for pi in ps:
x = x - pi*np.log2(pi)
return x
res = H([0.1, 0.2])
print(res)
0.796578428466
此外,不要遮盖内置sum
,这是不明智的做法。
答案 1 :(得分:1)
您可以将参数作为list
或tuple
传递。您可以在此处避免使用解包技巧。
def H(ps): #updated, not asterisk
my_sum = 0.0
for pi in ps:
my_sum = my_sum - pi*np.log2(pi)
return my_sum
x = [0.1, 0.2]
print (H([0.1, 0.2])) #argument as list
print(H(x)) #argument as list