Хотя вы пометили python-3.x
, похоже, что вы используете python-2.x
, где p/10000
приведет к 0 для значений p < 10000
, потому что оператор деления /
выполняет целочисленное деление в python-2.x
. Если это так , вы можете явно использовать 10000.0
вместо 10000
, чтобы избежать этого и получить деление с плавающей точкой.
Использование .0
не требуется в python 3+
потому что по умолчанию он выполняет деление поплавка.Следовательно, ваш код отлично работает в python 3.6.5
, хотя
import matplotlib.pyplot as plt
import numpy as np
x = list(range(1, 10000, 1))
y = [-np.log(p/10000.0) for p in x]
plt.scatter(x, y)
plt.show()

С другой стороны: вы можете просто использовать NumPy's arange
для генерацииx
и полностью избегайте list
и используйте векторизованную операцию.
x = np.arange(1, 10000)
y = -np.log(x/10000.0)