用于执行针对稀疏性优化的线性装箱的python函数
sparse_linear_binning的Python项目详细描述
sparse_linear_binning: linear binning (optimized for sparsity)
执行Wand and Jones中描述的线性装箱技术 在任意维数的规则间隔网格上。这个 asymptotic behavior 这种组合技术的性能优于所谓的简单组合 (如直方图)。d-维空间中的每个数据点必须 具有相关权重(对于同等权重的点,只需使用权重 每个点的1.0的)。
例如,在具有角点A、B、C和D的二维网格(A段)内 以及具有权重wp:
的2d数据点pA-----------------------------------B | | | | | | | | |- - - - P- - - - - - - - - - - - - | | | | D-----------------------------------C
- 给角A分配P和C之间面积比例的权重 (乘以wp)
- 将权重分配给p和d之间面积比例的角b (乘以wp)
- 给角C分配P和A之间面积比例的权重 (乘以wp)
- 将权重分配给p和b之间面积比例的角d (乘以wp)
注意,当 指定每个维度中网格点的数量(网格点动作 作为垃圾箱中心)。例如,如果希望网格点以0.1步为单位 在[0,1]范围内(即(0,.1,.2,.3,.4,.5,.6,.7,.8,.9,1)), 指定轴网点数为11。在内部,网格点 存储在一个高性能的基于C++的哈希表中。 (sparsepp)。这就允许 在某些情况下,由于哈希表没有 为具有接近零权重的网格点分配内存。适应 每个维度上任意数量的容器,任意精度 数字库(boost multiprecision) 可能在内部使用,会对性能产生负面影响。如果这个 性能下降是不可接受的,考虑减少 网格点的乘积 维度小于“无符号长long”的数值最大值。 你的系统。例如,在20个维度中,每个维度都有 51个网格点总计为1417109867075304357562612542226001 任意精度库的潜在网格点 必须注意与确定网格点相关的所有算法。
快速启动
- pip安装稀疏线性binning
或
- git克隆https://github.com/jhetherly/sparse_linear_binning
- cd稀疏线性组合
- python setup.py安装
示例
这将在单位平方中构造一百万个随机二维点 随机加权并构造由51组成的网格(可以是 沿着不同的维度不同)线性组合的“仓中心”。 仓中心网格的边界由extents和指定 可以认为是底部和溢流箱(即,这些是 第一个和最后一个bin中心的坐标)。
fromsparse_linear_binningimportsparse_linear_binningimportnumpyasnp# generate one million random 2D points and weights# (should take less than a second to bin)n_samples=1000000D=2# coordinates, weights, and extents must be of type "double"sample_coords=np.random.random(size=(n_samples,D))sample_weights=np.random.random(size=n_samples)extents=np.tile([0.,1.],D).reshape((D,2))n_bins=np.full(D,51)coords,weights=sparse_linear_binning(sample_coords,sample_weights,extents,n_bins)# check that weights on grid match original weightsprint(np.allclose(weights.sum(),sample_weights.sum()))
依赖性
- 努比
#1.1.0
- 添加了对自动将numpy数组转换为正确的d类型的支持。
- 添加了更明确的测试。