程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了为直方图定义 3D bin 与 1D bin 时的不同考虑?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决为直方图定义 3D bin 与 1D bin 时的不同虑??

开发过程中遇到为直方图定义 3D bin 与 1D bin 时的不同虑?的问题如何解决?下面主要结合日常开发的经验,给出你关于为直方图定义 3D bin 与 1D bin 时的不同虑?的解决方法建议,希望对你解决为直方图定义 3D bin 与 1D bin 时的不同虑?有所启发或帮助;

我正在尝试为我拥有的一些数据创建 3D 直方图,但我认为我定义 bin 的方式一定有问题,因为我得到了很多空的边际直方图。以下是我如何创建直方图以及如何检查值 --

# Hard boundarIEs for the cube 
param1_range = [0,6]
param2_range = [-2,+0.5]
param3_range = [0,2]

d_param1 = 0.5
param1_bins = np.arange(param1_range[0],param1_range[1],d_param1)
N_param1_bins = len(d_param1) - 1

d_param2 = 0.5
param2_bins = np.arange(param2_range[0],param2_range[1],d_param2)
N_param2_bins = len(d_param2) - 1

d_param3 = 0.25
param3_bins = np.arange(param3_range[0],param3_range[1],d_param3)
N_param3_bins = len(d_param3) - 1


empty_param1,empty_param2,empty_param3 = 0,0 
cube_full = np.zeros((Nobs,N_param1_bins,N_param2_bins,N_param3_bins))
for i in range(Nobs):
    tmp = np.vstack((param1_data[i,:],param2_data[i,param3_data[i,:])).T
    hist,_ = np.histogramdd(tmp[:,bins=[param1_bins,param2_bins,param3_bins],density=TruE)
    cube_full[i,:,:] = hist

    if np.all(hist[:,0] == 0.):
              empty_param1 = empty_param1 + 1
    if np.all(hist[0,0] == 0.):
              empty_param2 = empty_param2 + 1
    if np.all(hist[0,:] == 0.):
              empty_param3 = empty_param3 + 1

print(empty_param1/Nobs,empty_param2/Nobs,empty_param3/Nobs)

“param1”的边际直方图大约有一半是空的,而“param2”和“param3”的几乎所有边际直方图都是空的。

我通过查看我的数据确定了参数范围。我还使用这些相同的范围为不同的参数创建了 1D 直方图,并且不会像我尝试制作 3D 直方图时那样得到空箱。在定义 3D bin 与 1D bin 时,我是否遗漏了一些额外的虑因素?

解决方法

我在这里解释,但从评论中,我认为你想要的是:

    sum1 = np.sum(hist,(1,2))
    if np.all(sum1) == 0:
        empty_param1 += 1
    sum2 = np.sum(hist,(0,2))
    sum3 = np.sum(hist,1))

这实质上是从 3D 数据生成 1D 直方图。如果我仍然没有达到目标,也许您可​​以提供一个使用较小矩阵的示例。

例:

>>> x = np.arange(125).reshape((5,5,5))
>>> x
array([[[  0,1,2,3,4],[  5,6,7,8,9],[ 10,11,12,13,14],[ 15,16,17,18,19],[ 20,21,22,23,24]],[[ 25,26,27,28,29],[ 30,31,32,33,34],[ 35,36,37,38,39],[ 40,41,42,43,44],[ 45,46,47,48,49]],[[ 50,51,52,53,54],[ 55,56,57,58,59],[ 60,61,62,63,64],[ 65,66,67,68,69],[ 70,71,72,73,74]],[[ 75,76,77,78,79],[ 80,81,82,83,84],[ 85,86,87,88,89],[ 90,91,92,93,94],[ 95,96,97,98,99]],[[100,101,102,103,104],[105,106,107,108,109],[110,111,112,113,114],[115,116,117,118,119],[120,121,122,123,124]]])
>>> np.sum(x,2))
array([ 300,925,1550,2175,2800])
>>> np.sum(x,2))
array([1300,1425,1675,1800])
>>> np.sum(x,1))
array([1500,1525,1575,1600])
>>>

大佬总结

以上是大佬教程为你收集整理的为直方图定义 3D bin 与 1D bin 时的不同考虑?全部内容,希望文章能够帮你解决为直方图定义 3D bin 与 1D bin 时的不同考虑?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:3Dbin