【问题标题】:Plotting PMF jupyter notebook : ValueError: shape mismatch: objects cannot be broadcast to a single shape绘制 PMF jupyter 笔记本:ValueError:形状不匹配:无法将对象广播到单个形状
【发布时间】:2019-11-22 12:53:39
【问题描述】:

目前正在处理一项需要我将概率质量函数绘制到图表的任务。我所拥有的质量函数与投掷三遍有偏见的硬币有关:

P(H) = 0.75
P(T) = 0.25
X = 0,1,2,3
F(0) = P(X=0) = P(t,t,t) = 0.015625
F(1) = P(X=1) = P(h,t,t) + P(t,h,t) + P(t,t,h) = ‬0.140625
F(2) = P(X=2) = P(h,h,t) + P(h,t,h) + P(t,h,h) = 0.421875
F(3) = P(X=3) = P(h,h,h) = 0.421875

当我使用以下代码绘制这些点时

import matplotlib.pyplot as plt

prob = np.array([0,0.015625,0.140625,0.421875,0.421875])
x = np.arange(0,3)
plt.bar(x,prob, width = 0.5)
plt.xlim(0.5,3.5)
plt.show()

我遇到了这个错误:

ValueError: shape mismatch: objects cannot be broadcast to a single shape

【问题讨论】:

    标签: python matplotlib jupyter-notebook probability


    【解决方案1】:

    x 数组的形状必须与prob 数组的形状相匹配。我可以提出以下建议:

    import matplotlib.pyplot as plt
    
    prob = np.array([0.015625,0.140625,0.421875,0.421875])
    x = np.arange(4)
    plt.bar(x, prob, width = 0.5)
    plt.xticks(x)
    plt.xlim(-0.5,3.5)
    plt.show()
    

    【讨论】:

    • 这样一个可以避免的错误让我眼前一亮!感谢您的帮助,伙计们认为我需要刷新我的眼睛大声笑
    • 如果我要绘制 CDF 的累积分布频率图 CDF = X
    • 我该怎么做?
    • 我会看看 numpy cumsum 函数,我想你可以用它来构建你需要的东西
    • 嗨,是的,我现在有这段代码,只是想知道 id 如何绘制 CDF 图并获得 x 的预期值。
    【解决方案2】:

    prob 中有 5 个元素,x 中有 3 个元素。如果两个数组中的元素数量不同,Python 无法绘制图表。由于 prob 中有 5 个元素,因此需要在 x 轴上有 5 个刻度来绘制条形图。

    x = np.arange(0, 3) 更改为x = np.arange(0, 5) 并将plt.xlim(0.5,3.5) 更改为plt.xlim(0.5,4.5),您应该会得到情节。

    【讨论】:

    • 谢谢,不敢相信我没有注意到!
    猜你喜欢
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 2021-02-27
    • 2021-05-22
    • 2021-05-13
    • 2019-02-16
    • 2020-04-28
    相关资源
    最近更新 更多