numpy 从直方图2d中单独获取1d计数

vtwuwzda  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(86)

我有两个1d数据,我使用histogram2d来获得每个网格的计数,使用10个bin

x1 = np.random.normal(5,5,340)
y1 = np.random.normal(5,5,340)

x1y1, edgex1, edgey1 = np.histogram2d(x=x1,y=y1, bins=10)
x1y1

字符串
输出量:

array([[ 0.,  0.,  0.,  0.,  0.,  3.,  3.,  2.,  1.,  0.],
       [ 0.,  0.,  2.,  2.,  3.,  8.,  2.,  1.,  1.,  0.],
       [ 2.,  1.,  3.,  8., 13., 11., 14.,  3.,  2.,  1.],
       [ 0.,  3.,  6., 10.,  9., 11., 12., 14.,  3.,  1.],
       [ 1.,  3.,  6., 11., 22., 13., 12.,  5.,  2.,  0.],
       [ 0.,  1.,  4.,  9., 14., 17., 11.,  4.,  2.,  2.],
       [ 1.,  0.,  3.,  2.,  7., 10.,  4.,  3.,  1.,  0.],
       [ 0.,  0.,  1.,  1.,  3.,  2.,  2.,  2.,  1.,  0.],
       [ 0.,  0.,  0.,  0.,  2.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.]])


但是,我想知道每个网格中x1和y1点的数量,这样当它们相加时,它们就等于输出数组中的点(x1y1)。
我也不知道是否有可能使x1和y1的计数与矩阵x1y1的大小相同。如果有可能,我想知道如何做到。
任何想法都欢迎和感谢。

ymdaylpp

ymdaylpp1#

如果我得到它的权利,那么你会想要有边界分布。采取你的矩阵的数字,这可以实现:

sum_along_vertical = np.sum(x1y1, axis=0)
sum_along_vertical

array([ 4.,  8., 25., 43., 74., 75., 60., 34., 13.,  4.])

字符串

sum_along_horizontal = np.sum(x1y1, axis=1)
sum_along_horizontal

array([ 9., 19., 58., 69., 75., 64., 31., 12.,  2.,  1.])


你可以把它们放大成矩阵格式

iy = np.ones(sum_along_horizontal.shape[0])
X1 = np.outer(iy,sum_along_vertical)    
X1

array([[ 4.,  8., 25., 43., 74., 75., 60., 34., 13.,  4.],
       [ 4.,  8., 25., 43., 74., 75., 60., 34., 13.,  4.],
       [ 4.,  8., 25., 43., 74., 75., 60., 34., 13.,  4.],
       [ 4.,  8., 25., 43., 74., 75., 60., 34., 13.,  4.],
       [ 4.,  8., 25., 43., 74., 75., 60., 34., 13.,  4.],
       [ 4.,  8., 25., 43., 74., 75., 60., 34., 13.,  4.],
       [ 4.,  8., 25., 43., 74., 75., 60., 34., 13.,  4.],
       [ 4.,  8., 25., 43., 74., 75., 60., 34., 13.,  4.],
       [ 4.,  8., 25., 43., 74., 75., 60., 34., 13.,  4.],
       [ 4.,  8., 25., 43., 74., 75., 60., 34., 13.,  4.]])


ix = np.ones(sum_along_vertical.shape[0])
Y1 = np.outer(sum_along_horizontal,ix)    
Y1

array([[ 9.,  9.,  9.,  9.,  9.,  9.,  9.,  9.,  9.,  9.],
       [19., 19., 19., 19., 19., 19., 19., 19., 19., 19.],
       [58., 58., 58., 58., 58., 58., 58., 58., 58., 58.],
       [69., 69., 69., 69., 69., 69., 69., 69., 69., 69.],
       [75., 75., 75., 75., 75., 75., 75., 75., 75., 75.],
       [64., 64., 64., 64., 64., 64., 64., 64., 64., 64.],
       [31., 31., 31., 31., 31., 31., 31., 31., 31., 31.],
       [12., 12., 12., 12., 12., 12., 12., 12., 12., 12.],
       [ 2.,  2.,  2.,  2.,  2.,  2.,  2.,  2.,  2.,  2.],
       [ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.]])

相关问题