scipy.stats.binned_statistic_dd()中的输出

时间:2014-08-15 17:36:19

标签: python scipy

我正在尝试使用scipy.stats.binned_statistic_dd而我无法在生活中找出输出。有没有人在这里有任何建议?

看看这个简单的示例程序:

import scipy
scipy.__version__
# '0.14.0'
import numpy as np
print scipy.stats.binned_statistic_dd([np.ones(10), np.ones(10)], np.arange(10), 'count', bins=3)
#(array([[  0.,   0.,   0.],
#       [  0.,  10.,   0.],
#       [  0.,   0.,   0.]]), 
# [array([ 0.5       ,  0.83333333,  1.16666667,  1.5       ]), 
# array([ 0.5       ,  0.83333333,  1.16666667,  1.5       ])], 
# array([12, 12, 12, 12, 12, 12, 12, 12, 12, 12]))

因此文档声称输出是:

  

统计:ndarray,shape(nx1,nx2,nx3,...)的值   在每个二维箱子中选择统计数据

     

边缘:列表   ndarrays描述(nxi + 1)bin边的D数组列表   每个维度

     

binnumber:1-D ndarray of int这将分配给每个人   观察一个整数,表示其中的bin   观察下降。数组的长度与值相同。

在示例中,统计数据很好,我要求'计数'并得到10,在同一个bin中有10个元素。边缘也很有道理,要结束的数据是维度2,我想要3个箱子,所以我得到了4个合理的边缘。

然后问题binnumber对我来说毫无意义,array([12, 12, 12, 12, 12, 12, 12, 12, 12, 12]),确实有10个数字长度相同,输入数据np.arange(10),但数字12根本没有意义。我错过了什么12不是变成多D阵列的箱子的解开索引,因为每个维度中有3个箱子我可以看到最多9个数字。什么是12告诉我?

1 个答案:

答案 0 :(得分:2)

binnumbers中的值是包含额外内容的分类的拆分索引 一套“超出范围”的垃圾箱。

在此示例中,

In [40]: hst, edges, bincounts = binned_statistic_dd([np.ones(10), np.ones(10)], None, 'count', bins=3)

In [41]: hst
Out[41]: 
array([[  0.,   0.,   0.],
       [  0.,  10.,   0.],
       [  0.,   0.,   0.]])

箱子的编号如下:

  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

hst中不包含“超出范围”的分档; hst中的数据对应于bin编号 6,7,8,11,12,13,16,17和18.这就是为什么bincounts中的所有值都是12:

In [42]: bincounts
Out[42]: array([12, 12, 12, 12, 12, 12, 12, 12, 12, 12])

您可以使用range参数强制计数到外部区域。例如, 通过将坐标的范围设置为[2,3]和[0,0.5],所以所有的值都在 第一个坐标是其范围的左侧,第二个坐标中的所有值都是 在它们的范围的右边,所有的点最终都在右上方的外部容器中,这是 bin index 4:

In [51]: binned_statistic_dd([np.ones(10), np.ones(10)], None, 'count', bins=3, range=[[2,3],[0,0.5]])
Out[51]: 
(array([[ 0.,  0.,  0.],
        [ 0.,  0.,  0.],
        [ 0.,  0.,  0.]]),
 [array([ 2.        ,  2.33333333,  2.66666667,  3.        ]),
  array([ 0.        ,  0.16666667,  0.33333333,  0.5       ])],
 array([4, 4, 4, 4, 4, 4, 4, 4, 4, 4]))