kdtree rs
1.0.0
빠른 지리공간 인덱싱 및 최근접 이웃 조회를 위한 Rust의 K차원 트리
Cargo.toml
에 kdtree
추가
[ dependencies ]
kdtree = " 0.7.0 "
kdtree에 포인트를 추가하고 거리 함수를 사용하여 가장 가까운 n 포인트를 쿼리합니다.
use kdtree :: KdTree ;
use kdtree :: ErrorKind ;
use kdtree :: distance :: squared_euclidean ;
let a : ( [ f64 ; 2 ] , usize ) = ( [ 0f64 , 0f64 ] , 0 ) ;
let b : ( [ f64 ; 2 ] , usize ) = ( [ 1f64 , 1f64 ] , 1 ) ;
let c : ( [ f64 ; 2 ] , usize ) = ( [ 2f64 , 2f64 ] , 2 ) ;
let d : ( [ f64 ; 2 ] , usize ) = ( [ 3f64 , 3f64 ] , 3 ) ;
let dimensions = 2 ;
let mut kdtree = KdTree :: new ( dimensions ) ;
kdtree . add ( & a . 0 , a . 1 ) . unwrap ( ) ;
kdtree . add ( & b . 0 , b . 1 ) . unwrap ( ) ;
kdtree . add ( & c . 0 , c . 1 ) . unwrap ( ) ;
kdtree . add ( & d . 0 , d . 1 ) . unwrap ( ) ;
assert_eq ! ( kdtree.size ( ) , 4 ) ;
assert_eq ! (
kdtree.nearest ( &a. 0 , 0 , &squared_euclidean ) .unwrap ( ) ,
vec! [ ]
) ;
assert_eq ! (
kdtree.nearest ( &a. 0 , 1 , &squared_euclidean ) .unwrap ( ) ,
vec! [ ( 0f64 , & 0 ) ]
) ;
assert_eq ! (
kdtree.nearest ( &a. 0 , 2 , &squared_euclidean ) .unwrap ( ) ,
vec! [ ( 0f64 , & 0 ) , ( 2f64 , & 1 ) ]
) ;
assert_eq ! (
kdtree.nearest ( &a. 0 , 3 , &squared_euclidean ) .unwrap ( ) ,
vec! [ ( 0f64 , & 0 ) , ( 2f64 , & 1 ) , ( 8f64 , & 2 ) ]
) ;
assert_eq ! (
kdtree.nearest ( &a. 0 , 4 , &squared_euclidean ) .unwrap ( ) ,
vec! [ ( 0f64 , & 0 ) , ( 2f64 , & 1 ) , ( 8f64 , & 2 ) , ( 18f64 , & 3 ) ]
) ;
assert_eq ! (
kdtree.nearest ( &a. 0 , 5 , &squared_euclidean ) .unwrap ( ) ,
vec! [ ( 0f64 , & 0 ) , ( 2f64 , & 1 ) , ( 8f64 , & 2 ) , ( 18f64 , & 3 ) ]
) ;
assert_eq ! (
kdtree.nearest ( &b. 0 , 4 , &squared_euclidean ) .unwrap ( ) ,
vec! [ ( 0f64 , & 1 ) , ( 2f64 , & 0 ) , ( 2f64 , & 2 ) , ( 8f64 , & 3 ) ]
) ;
2.3GHz Intel i5-7360U를 탑재한 cargo bench
:
cargo bench
Running target/release/deps/bench-9e622e6a4ed9b92a
running 2 tests
test bench_add_to_kdtree_with_1k_3d_points ... bench: 106 ns/iter (+/- 25)
test bench_nearest_from_kdtree_with_1k_3d_points ... bench: 1,237 ns/iter (+/- 266)
test result: ok. 0 passed; 0 failed; 0 ignored; 2 measured; 0 filtered out
다양한 수정 및 성능 개선에 대해 Eh2406에게 감사드립니다.
다음 중 하나에 따라 라이선스가 부여됨
귀하의 선택에 따라.
귀하가 명시적으로 달리 명시하지 않는 한, Apache-2.0 라이선스에 정의된 대로 귀하가 저작물에 포함하기 위해 의도적으로 제출한 기여는 추가 이용약관 없이 위와 같이 이중 라이선스가 부여됩니다.