【问题标题】:Python 2d-histogram success rate per bin每个 bin 的 Python 2d 直方图成功率
【发布时间】:2013-04-27 08:35:10
【问题描述】:

我在数组 x、y 和 w 中有数据,其中“x”和“y”表示位置,“w”是 1 或 0 的权重,表示成功或失败。我正在尝试创建一个 2d 直方图,其中直方图的每个 bin 根据该 bin 中的成功百分比(即 bin 中的成功数除以 bin 中的总点数)进行着色。我已经玩了很多 numpy.histogram2d 并且可以得到密度图,但这与我的目标成功率方案不同。请注意 numpy.histogram2d 参数中的 normed=True 并不能缓解这个问题。

(为了澄清差异,如果箱中成功的次数较多,则密度图将指示较大的“颜色值”,而不管同一箱中有多少失败。我想知道取而代之的是成功,因此同一个 bin 中的大量失败会产生较小的“颜色值”。我为拙劣的术语道歉)。

非常感谢任何可以提供帮助的人!

当前代码不符合我的目标的示例:

import matplotlib.pyplot as plt
import numpy as np
plt.figure(1)
H, xedges, yedges = np.histogram2d(x, y, bins=50, weights=w, normed=True)
extent = [yedges[0], yedges[-1], xedges[-1], xedges[0]]
plt.imshow(H, extent=extent,interpolation='nearest')
plt.colorbar()
plt.show()

【问题讨论】:

    标签: python numpy histogram


    【解决方案1】:

    我很确定这可行,但您不提供数据,因此很难检查。 normed=True 为您提供密度,如果您不通过 normed=True,您将获得加权样本计数,因此如果您将加权版本(实际上只是每个 bin 的#successes)除以未加权(每个 bin 中的元素数) , 你最终会获得 % 的成功。

    import matplotlib.pyplot as plt
    import numpy as np
    plt.figure(1)
    H, xedges, yedges = np.histogram2d(x, y, bins=50, weights=w)
    H2, _, _ = np.histogram2d(x,y, bins=50)
    extent = [0,1, xedges[-1], xedges[0]]
    plt.imshow(H/H2, extent=extent,interpolation='nearest')
    plt.colorbar()
    plt.show()
    

    这可能会在最终直方图中留下nan,因此您可能需要针对这些情况做出决定。

    【讨论】:

    • 太棒了,就像一个魅力。非常感谢你!我实际上使用了上面写的下划线,你介意解释一下它们的作用吗(我的假设是它允许在不重新计算 xedges 和 yedges 的情况下计算 H2)。
    • @Dr.Jones 它没有做任何特别的事情...... np.histogram2d 的输出是一个包含三个元素的元组;但是,解包时经常使用 _ 来表示您不关心该元素。 xedges 和 yedges 不会根据权重而改变,因此再次保留它们并不重要。要真正看到这项工作,请尝试lst = [1,2,3]; a,b,c = lst; print b; print c; d,b,b = lst; print b; 之类的东西(当你不能做多行时很难显示)但基本上发生的情况是你分配给 b 两次,只有最后一个分配保留。
    猜你喜欢
    • 1970-01-01
    • 2019-06-04
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多