如何在python中绘制日志?

时间:2019-02-07 13:58:05

标签: python matplotlib

我有一个这样的函数,叫做熵 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

3 个答案:

答案 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()

最终,它可以使用此算法了,谢谢