使用5个bins绘制直方图报TypeError,Python代码错误如何解决?
问题原因
你传给matplotlib直方图接口的res变量是字典组成的列表,每个元素为{'a': 采样值, 'res': 均衡解}结构。直方图绘制需要对数值大小做比较来统计分箱,而字典无法直接和浮点数比较,因此触发了该报错。
修复方案
如果需要绘制求解得到的均衡值X的直方图,只需从字典列表中提取所有res对应的数值序列再传入绘图接口即可,修正后完整代码如下:
import numpy as np from scipy import optimize import matplotlib.pyplot as plt a_samples = np.random.uniform(size = 100, low = 0.1, high = 5.0) z = 0.1 def f(X, a): return 1/(z * X**2 ) - (X**a + X + 10) res = [] for a in a_samples: # 此处将a作为参数传入f,避免依赖全局变量 res.append({'a': a, 'res': optimize.newton(f, a, args=(a,), tol= 1e-8)}) print(res) def hist(): fig, ax = plt.subplots() # 提取所有均衡解X的数值 x_values = [item['res'] for item in res] ax.hist(x_values, bins=5) plt.show() hist()
说明:上述代码同时优化了原代码中f函数依赖全局变量、循环变量覆盖原数组变量的问题,避免后续代码迭代出现变量冲突。
内容的提问来源于stack exchange,提问作者pao
相关产品推荐
相关产品推荐

