前提・実現したいこと
matplotlibでデータの分布を混合正規分布を用いてモデル化したいのですが、mlabという関数が使用できなく困っております。
mlabの関数の内容としては、
def normpdf(x, *args): "Return the normal pdf evaluated at *x*; args provides *mu*, *sigma*" mu, sigma = args return 1./(np.sqrt(2*np.pi)*sigma)*np.exp(-0.5 * (1./sigma*(x - mu))**2)
という内容なので、一度関数mlabを使用しているnormを求めるところを書き換えたのですが、上手くいきませんでした。
大変厚かましいですが、解決法をご教授頂きたいです。
よろしくお願いいたします。
発生している問題・エラーメッセージ
AttributeError: 'Rectangle' object has no property 'normed'
該当のソースコード
import numpy as np import matplotlib.pyplot as plt import matplotlib.mlab as mlab import math def draw_hist(xs, bins): plt.hist(xs, bins=bins, normed=True, alpha=0.5) def predict(data): mu = np.mean(data) var = np.var(data, ddof=1) return mu, var def main(): mu = 3.0 v = 2.0 std = math.sqrt(v) N = 10000 data = np.random.normal(mu, std, N) mu_predicted, var_predicted = predict(data) std_predicted = math.sqrt(var_predicted) print("original: mu={0}, var={1}".format(mu, v)) print(" predict: mu={0}, var={1}".format(mu_predicted, var_predicted)) draw_hist(data, bins=40) xs = np.linspace(min(data), max(data), 200) norm = mlab.normpdf(xs, mu_predicted, std_predicted) plt.plot(xs, norm, color="red") plt.xlim(min(xs), max(xs)) plt.xlabel("x") plt.ylabel("Probability") plt.show() if __name__ == '__main__': main()
補足情報(FW/ツールのバージョンなど)
matplotlib 3.3.0
python 3.8
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/02 06:22