我使用以下代码生成列表,并希望为其绘制分布。
a = [random.randint(0, 1<<256) for i in range(500000)]
plt.hist(a, bins=400)
plt.show()
但是我遇到一些如下所示的问题:
TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
我尝试使用以下代码将类型更改为numpy.ndarray
,但无效。
x=np.array(a)
plt.hist(x, bins=400)
plt.show()
但是我遇到了同样的错误提示。
以下代码适用于numpy.ndarray
import numpy as np
import matplotlib.pyplot as plt
# Fixing random state for reproducibility
np.random.seed(19680801)
mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)
print(type(x))
# the histogram of the data
n, bins, patches = plt.hist(x, 50, density=True, facecolor='g', alpha=0.75)
plt.xlabel('Smarts')
plt.ylabel('Probability')
plt.title('Histogram of IQ')
plt.text(60, .025, r'$\mu=100,\ \sigma=15$')
plt.xlim(40, 160)
plt.ylim(0, 0.03)
plt.grid(True)
plt.show()
但是我想弄清楚为什么我的行不通。
答案 0 :(得分:0)
plt.hist(a, bin=400)
不是正确的输入。您应该使用plt.hist(a, bins=400)
。另外,1<<256
似乎是一个巨大的数字,对我来说似乎不合适。
问题似乎是由于'int'对象太大而hist无法处理它。当转移到浮动时,它实际上可以工作。
num = 1<<256
a = [random.randint(0, num) for i in range(5000)]
b = [np.float(i) for i in a]
plt.hist(b, bins=400)
plt.show()