kdtree rs
1.0.0
Árvore K-dimensional em Rust para indexação geoespacial rápida e pesquisa de vizinhos mais próximos
Adicionar kdtree
ao Cargo.toml
[ dependencies ]
kdtree = " 0.7.0 "
Adicione pontos ao kdtree e consulte os n pontos mais próximos com a função de distância
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
com Intel i5-7360U de 2,3 GHz:
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
Obrigado Eh2406 por várias correções e melhorias de desempenho.
Licenciado sob qualquer um dos
a sua opção.
A menos que você declare explicitamente o contrário, qualquer contribuição enviada intencionalmente para inclusão no trabalho por você, conforme definido na licença Apache-2.0, deverá ser licenciada duplamente conforme acima, sem quaisquer termos ou condições adicionais.