Как я могу построить лог в Python? - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть такая функция, которая называется энтропией H(y)=(summation over y)-p(y)*log2(p(y).

Я хочу построить ее для значений от 0 до 1, и имеет максимальное значение в p (y) = 0,5, которое равно1. 1. 1004 * Я не могу построить это с помощью 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 и 0 вp_y = 0,1

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

Вот мой пример построения вашего кода и функции, как на обычном, так и на полулогическом графике.

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')

Дайте мне знать, если я могу помочь с чем-либо еще.

0 голосов
/ 07 февраля 2019
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()

наконец-то это сработало с этим алгоритмом, спасибо

0 голосов
/ 07 февраля 2019

Вам нужно будет предоставить 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...