kdtree rs
1.0.0
K-dimensionaler Baum in Rust für schnelle Geoindizierung und Suche nach nächsten Nachbarn
Fügen Sie kdtree
zu Cargo.toml
hinzu
[ dependencies ]
kdtree = " 0.7.0 "
Fügen Sie Punkte zu kdtree hinzu und fragen Sie die nächsten n Punkte mit der Distanzfunktion ab
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 ) ]
) ;
cargo bench
mit 2,3 GHz Intel i5-7360U:
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
Vielen Dank an Eh2406 für verschiedene Korrekturen und Leistungsverbesserungen.
Lizenziert unter einem von beiden
nach Ihrer Wahl.
Sofern Sie nicht ausdrücklich etwas anderes angeben, unterliegt jeder Beitrag, der von Ihnen absichtlich zur Aufnahme in das Werk eingereicht wird, wie in der Apache-2.0-Lizenz definiert, einer Doppellizenz wie oben, ohne zusätzliche Bedingungen oder Konditionen.