kdtree rs
1.0.0
ต้นไม้มิติ K ใน Rust เพื่อการจัดทำดัชนีเชิงพื้นที่ที่รวดเร็วและการค้นหาเพื่อนบ้านที่ใกล้ที่สุด
เพิ่ม kdtree
ลงใน Cargo.toml
[ 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 ) ]
) ;
cargo bench
พร้อม 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
ขอบคุณ Eh2406 สำหรับการแก้ไขและปรับปรุงประสิทธิภาพต่างๆ
ได้รับอนุญาตภายใต้ข้อใดข้อหนึ่ง
ตามตัวเลือกของคุณ
เว้นแต่คุณจะระบุไว้เป็นอย่างอื่นอย่างชัดเจน การสนับสนุนใดๆ ที่ส่งโดยเจตนาเพื่อรวมไว้ในผลงานของคุณ ตามที่กำหนดไว้ในใบอนุญาต Apache-2.0 จะต้องได้รับใบอนุญาตแบบคู่ตามที่กล่าวไว้ข้างต้น โดยไม่มีข้อกำหนดหรือเงื่อนไขเพิ่มเติมใดๆ