Fast parallel ball tree construction for machine learning
Project description
Ball Tree
A fast, parallel ball tree implementation with PyTorch integration, built using Cython and OpenMP.
Features
- High Performance: Optimized C++ implementation with OpenMP parallelization
- PyTorch Integration: Native support for PyTorch tensors
- Flexible API: Multiple interfaces for different use cases
- Memory Efficient: Efficient memory usage and management
Installation
From PyPI
pip install balltree-erwin
From Source
git clone https://github.com/maxxxzdn/balltree.git
cd balltree
pip install -e .
Requirements
- Python >= 3.8
- NumPy
- PyTorcn
- Cython >= 0.29.0 (for building from source)
System Dependencies
macOS
brew install libomp
Quick Start
import torch
import balltree
# Create some sample data
data = torch.randn(1000, 3) # 1000 points in 3D
batch_idx = torch.zeros(1000, dtype=torch.long) # Single batch
# Build a ball tree
tree_indices, tree_mask = balltree.build_balltree(data, batch_idx)
# Build with rotations for cross-ball interactions
tree_idx, tree_mask, rot_indices = balltree.build_balltree_with_rotations(
data, batch_idx,
strides=[2, 2],
ball_sizes=[64, 32, 16],
angle=45.0
)
API Reference
Core Functions
build_balltree(data, batch_idx)
Build ball trees for batched data.
Parameters:
data: torch.Tensor of shape (num_samples, num_features)batch_idx: torch.Tensor of shape (num_samples,) - batch assignment
Returns:
tree_indices: Indices of tree nodestree_mask: Boolean mask for tree structure
partition_balltree(data, batch_idx, target_level)
Partition ball trees to a specific level.
Parameters:
data: torch.Tensor of shape (num_samples, num_features)batch_idx: torch.Tensor of shape (num_samples,)target_level: int - target partitioning level
Returns:
partitioned_indices: Partitioned tree indices
build_balltree_with_rotations(data, batch_idx, strides, ball_sizes, angle=45.0)
Build ball trees with rotational variants for enhanced modeling.
Parameters:
data: torch.Tensor of shape (num_samples, num_features)batch_idx: torch.Tensor of shape (num_samples,)strides: list of int - pooling stridesball_sizes: list of int - ball sizes for each layerangle: float - rotation angle in degrees
Returns:
tree_idx: Original tree indicestree_mask: Tree structure maskrot_tree_indices: List of rotated tree indices
Use Cases
This library is designed for applications requiring efficient spatial data structures:
- Machine Learning: Spatial attention mechanisms, geometric deep learning
- Computer Graphics: Collision detection, ray tracing acceleration
- Robotics: Path planning, nearest neighbor queries
- Scientific Computing: N-body simulations, clustering algorithms
License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
balltree_erwin-0.1.0.tar.gz
(207.1 kB
view details)
File details
Details for the file balltree_erwin-0.1.0.tar.gz.
File metadata
- Download URL: balltree_erwin-0.1.0.tar.gz
- Upload date:
- Size: 207.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
19a74e7521b0bc8a4d0dfe8230bd41508f3d5a64774ec53e325717540f21d5ff
|
|
| MD5 |
c33f30af6f9674e18fdb5300046e7739
|
|
| BLAKE2b-256 |
f88188a5d76ec29d01fbf9878280e5b8bd17cb4a99d375e9c0933d44d2325de6
|