通常在分类或数据分析中,我想" lump"类别在一起。例如,如果用户能够在值1到6之间陈述他们的偏好,我可能想要将[1, 2], [3, 4], [5, 6]
混为一谈。
在我看来,numpy.digitize()
是numpy.histogram()
的自然延伸,应该让我有能力执行上面提到的内容。
例如,让我们创建一个包含偶数个整数的随机数组:
In [337]: arr = numpy.random.randint(low=0, high=6, size=100)
In [340]: numpy.unique(arr)
Out[340]: array([0, 1, 2, 3, 4, 5])
numpy.historgram(bins=3)
按预期执行,创建以下容器和适当的映射。
In [338]: freq, bins = numpy.histogram(arr, bins=3)
In [339]: print(bins)
Out[339]:
array([ 0. , 1.66666667, 3.33333333, 5. ]))
应该注意according the numpy.histogram()
,间隔是
这按照预期进行映射,其中来自文档:
备注
除了最后一个(最右边)的垃圾箱以外的所有垃圾箱都是半开的。换一种说法, 如果
bins
是::[1,2,3,4]
然后第一个bin是
[1, 2)
(包括1,但不包括2)和 第二个[2, 3)
。但是,最后一个bin是[3, 4]
包含 4。
[0, 1]
==> 1 [2, 3]
==> 2 [4, 5]
==> 3 numpy.digitize()
如果我们遵循numpy.histogram
用来构建其垃圾箱的相同逻辑,那么
函数numpy.digitize(arr, bins=bins)
应该无缝地使我们达到预期的结果,
并使用与创建箱子相同的逻辑来实现。 然而,正在运行
以下代码产生了一个奇怪的结果:
In [340]: bind_arr = numpy.digitize(
arr, bins=bins)
In [341]: print(numpy.unique(bind_arr))
Out[347]: array([1, 2, 3, 4])
发生的事情是numpy.digitize
假设bin[i - 1] <= x < bin[i]
,意思是
5.
构建中包含的bin
现在已排除(并且已经拥有自己的bin)
我使用的简单黑客一直是:
In [348]: tol = .0001
In [349]: bins[-1] += tol
现在numpy.digitize()
函数按预期工作,下面的函数提供了预期的结果:
In [358]: bind_arr2 = numpy.digitize(arr, bins=bins)
In [359]: print(numpy.unique(bind_arr2))
Out[359]: array([1, 2, 3])
我的问题:是否有一种直接的方式来执行我上面列出的(普通)操作
增加最后的垃圾箱?这似乎是不一致的逻辑,不是吗?最后,这种类型的逻辑是否足够有效(在人们的意见中)我应该发出拉取请求以将功能添加到numpy.digitize()
?