我有一个这样的函数,叫做熵
H(y)=(summation over y)-p(y)*log2(p(y)
。
我想将其绘制为0到1之间的值,并且最大值在p(y)= 0.5中等于1。
我无法使用plt.plot进行绘制,如何实现?
import numpy as np
import matplotlib.pyplot as plt
h_y=[]
p_y=np.array([0,0.5,1])
for i in range(0,2):
a=np.sum(-np.nan_to_num(p_y[i]*np.log2(p_y[i])))
h_y=a.append(a)
plt.plot(h_y)
结果将为对数,在p_y = 0.5时最大值,在p_y = 0,1时值为0
答案 0 :(得分:0)
您需要为plt.plot
提供两个参数(doc):第一个-参数列表,第二个-给定参数的熵值列表。使用plt.show()
来实际显示您的绘图。
还没有为0定义对数,因此请用接近0的值替换该值。
import matplotlib.pyplot as plt
def entropy(y):
return - y * math.log2(y)
p_y=[0.01,0.5,1]
plt.plot(p_y, [entropy(y) for y in p_y])
plt.show()
答案 1 :(得分:0)
这是我的在正常和半对数图中绘制代码和函数的示例。
numpy
非常适合矢量化操作,可以避免for循环并编写易于阅读的代码。
import numpy as np
import matplotlib.pyplot as plt
h_y=[]
x = np.arange(0.001, 1, 0.001)
y = -x*np.log2(x) - (1-x)*np.log2(1-x)
plt.plot(x, y)
plt.savefig('foo.png')
plt.semilogx(x,y)
plt.savefig('bar.png')
plt.semilogy(x,y)
plt.savefig('baz.png')
让我知道我是否还能提供其他帮助。
答案 2 :(得分:0)
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0., 1, 0.001)
y = -x*np.log2(x) - (1-x)*np.log2(1-x)
plt.scatter(x, y)
plt.show()
最终,它可以使用此算法了,谢谢