快速简单的一维和二维直方图
项目描述
关于
有时你只想使用常规的直方图进行简单的1D或2D直方图计算。快速。没有废话。《Numpy》的直方图功能非常灵活,可以处理例如非均匀分箱,但这种灵活性是以性能为代价的。
fast-histogram 小型包旨在提供简单且快速的常规直方图功能,而不会牺牲性能。它不做任何复杂的事情 - 它只是用C语言实现了一个简单的直方图算法,并保持其简单性。目标是拥有快速、健壮且可靠的函数。结果是这里有一个一维直方图函数,比 numpy.histogram 快 7-15倍,还有一个二维直方图函数,比 numpy.histogram2d 快 20-25倍。
安装
pip install fast-histogram
或者如果你使用conda,你可以这样做
conda install -c conda-forge fast-histogram
然后 fast_histogram 模块提供了两个函数: histogram1d 和 histogram2d
from fast_histogram import histogram1d, histogram2d
示例
这里是一个将1000万个点分箱到常规2D直方图的例子
In [1]: import numpy as np
In [2]: x = np.random.random(10_000_000)
In [3]: y = np.random.random(10_000_000)
In [4]: %timeit _ = np.histogram2d(x, y, range=[[-1, 2], [-2, 4]], bins=30)
935 ms ± 58.4 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
In [5]: from fast_histogram import histogram2d
In [6]: %timeit _ = histogram2d(x, y, range=[[-1, 2], [-2, 4]], bins=30)
40.2 ms ± 624 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
(请注意,在Python 3.6语法中, 10_000_000 是可能的,在旧版本中使用 10000000 代替)
这里的版本比20倍快!以下图表显示了上述分箱参数的数组大小随时间的变化速度
以及一维情况的结果,也使用了30个分箱。二维情况的速度提升始终在20-25倍之间,一维情况从小型数组中的15倍到大型数组中的约7倍。
问答
为什么直方图函数不返回边缘?
计算并返回边缘似乎很简单,但当计算10^5个或更少的元素的直方图时,这可能会使速度降低几个数量级,因此不返回边缘是关于性能的故意决定。不过,如果需要,您可以轻松地使用 numpy.linspace 自己计算边缘。
包X难道已经做了这个,而且做得更好吗?
这完全可能是真的!如果这重复了另一个包,或者如果可以使用Numpy以更智能的方式使用以获得相同的效果,请提出一个问题,我会考虑弃用这个包:)
一个包含快速直方图函数(包括多维直方图)并可以计算其他统计量的包是 vaex,所以如果您需要更高级的功能,请查看那里!
2D直方图与应有的直方图没有转置吗?
实际上没有“正确”和“错误”的方向——在这里,我们采用与Numpy一致的约定,所以
numpy.histogram2d(x, y, range=[[xmin, xmax], [ymin, ymax]], bins=[nx, ny])
应该得到相同的结果。
fast_histogram.histogram2d(x, y, range=[[xmin, xmax], [ymin, ymax]], bins=[nx, ny])
为什么不直接向Numpy贡献这个?
如上所述,Numpy函数功能更强大,所以它们不能被这里的功能所替代。一个选择是在Numpy的函数中检查简单的情况,并调度到像这里一样的函数,或者添加用于常规分箱的专用函数。我希望我们最终以某种形式将此纳入Numpy,但就目前而言,目标是让需要支持一系列Numpy版本的包可以使用这个功能。
为什么不使用Cython?
我最初用Cython实现了这个功能,但发现直接使用C扩展可以提升50%的性能。
关于使用Numba呢?
我特别希望尽可能简化这个包的安装,虽然Numba是一个很棒的包,但它在Anaconda之外安装并不简单。
这能并行化吗?
在特定情况下,这可能受益于并行化。最简单的解决方案可能是使用OpenMP,但这在所有平台上都可能不适用,所以它需要是可选的。
您能通过使用GPU来使其更快吗?
几乎肯定可以,但这里的目的是使其易于安装和便携,引入GPU将影响这两者。
为什么要为这个功能专门创建一个包?这只是一个非常小的功能。
需要这个功能的包可以简单地捆绑自己的C扩展或Cython代码来完成这个任务,但发布这个迷你包的主要动机是避免因为需要快速直方图而将纯Python包转换为需要编译的包。
我能贡献吗?
当然可以!这不是一个完整的包,我欢迎拉取请求来改进它。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪一个,请了解更多关于安装包的信息。
源分发
构建分发
fast_histogram-0.14.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 390973b98af22bda85c29dcf6f008ba0d626321e9bd3f5a9d7a43e5690ea69ea |
|
MD5 | 4a9bbb01431024af1c17d7c7c0deb142 |
|
BLAKE2b-256 | e87704a9b4b5caa6e6b3a2f633b15dec0996c1559fc26e9ba73bb3d1d844c874 |
fast_histogram-0.14-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8245d4de782304eb396581677b43ca0b9e35a0f120ecb207fb353c852c8001a8 |
|
MD5 | 363f3298d6c9a7c9a622809560e7517a |
|
BLAKE2b-256 | 2f78abd20be4dbf5a34a38c65c13424472fbe3400a790c7cecd54023dab2fc8c |
哈希值 for fast_histogram-0.14-cp39-abi3-musllinux_1_1_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f1a263da3d832e8faa10c7228b23028ac4a406d2dd7cebbe89b2d8a9a6d58a0c |
|
MD5 | b517a670a6d78d6be129da4d82721dc9 |
|
BLAKE2b-256 | e86efdd53002da2c1c5f3694eb98f015728e842c2d26dd28fba618a04efadb4a |
哈希值 for fast_histogram-0.14-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b425d93e4bf1b0cdc223b8fe91ca68aa53c314b8ec374027b9a215a41aa85658 |
|
MD5 | 5665df3cf2cc71870cc10df7a6acd43f |
|
BLAKE2b-256 | 0ff9524b8a302862bdc7100a5e0662d3fa49500af20badcabaddeec474819b8d |
哈希值 for fast_histogram-0.14-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1f2f1d4b091fa065fc1991dd10f06812cfba7549622bf63f7888ac1c8c7ed9bb |
|
MD5 | 5f48da277b3c89a66dbf3fe12cd15a1e |
|
BLAKE2b-256 | 503ef0dba6333dbe5c5a338d1466939c8733256a5f6d7e10615b8f96a90277e5 |
哈希值 for fast_histogram-0.14-cp39-abi3-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 01f26dd20166040c50b5381f0a76635d81d5db9cfaaed7ec30103edf71e88c3f |
|
MD5 | b31738c9f07629e0fe9274fcfd8ae6f0 |
|
BLAKE2b-256 | 0c2cd4d96c78e72031f3171fb3a584b557d79d191e9bb4e93747f793c18f8623 |
哈希值 for fast_histogram-0.14-cp39-abi3-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 15876672df4831177344dfd0afbf5fd532c78f7bfca8bfabcb0f3d558f672e99 |
|
MD5 | 64273769da81992fd9cd1a94560ff7f5 |
|
BLAKE2b-256 | eca3acf5d7641585da06982027a11727b174c4f9311c13b422111c5f197c1a57 |