@@ -35,12 +35,9 @@ impl SparseVector {
3535 }
3636 }
3737
38- /// Creates a sparse vector from coordinates.
39- pub fn from_coordinates < I : IntoIterator < Item = ( i32 , f32 ) > > (
40- iter : I ,
41- dim : usize ,
42- ) -> SparseVector {
43- let mut elements: Vec < ( i32 , f32 ) > = iter. into_iter ( ) . filter ( |v| v. 1 != 0.0 ) . collect ( ) ;
38+ /// Creates a sparse vector from `(index, value)` pairs.
39+ pub fn from_pairs < I : IntoIterator < Item = ( i32 , f32 ) > > ( pairs : I , dim : usize ) -> SparseVector {
40+ let mut elements: Vec < ( i32 , f32 ) > = pairs. into_iter ( ) . filter ( |v| v. 1 != 0.0 ) . collect ( ) ;
4441 elements. sort_by_key ( |v| v. 0 ) ;
4542 let indices: Vec < i32 > = elements. iter ( ) . map ( |v| v. 0 ) . collect ( ) ;
4643 let values: Vec < f32 > = elements. iter ( ) . map ( |v| v. 1 ) . collect ( ) ;
@@ -104,16 +101,16 @@ mod tests {
104101 }
105102
106103 #[ test]
107- fn test_from_coordinates_map ( ) {
108- let elements = HashMap :: from ( [ ( 0 , 1.0 ) , ( 2 , 2.0 ) , ( 4 , 3.0 ) ] ) ;
109- let vec = SparseVector :: from_coordinates ( elements , 6 ) ;
104+ fn test_from_pairs_map ( ) {
105+ let pairs = HashMap :: from ( [ ( 0 , 1.0 ) , ( 2 , 2.0 ) , ( 4 , 3.0 ) ] ) ;
106+ let vec = SparseVector :: from_pairs ( pairs , 6 ) ;
110107 assert_eq ! ( vec![ 1.0 , 0.0 , 2.0 , 0.0 , 3.0 , 0.0 ] , vec. to_vec( ) ) ;
111108 }
112109
113110 #[ test]
114- fn test_from_coordinates_vec ( ) {
115- let elements = vec ! [ ( 0 , 1.0 ) , ( 2 , 2.0 ) , ( 4 , 3.0 ) ] ;
116- let vec = SparseVector :: from_coordinates ( elements , 6 ) ;
111+ fn test_from_pairs_vec ( ) {
112+ let pairs = vec ! [ ( 0 , 1.0 ) , ( 2 , 2.0 ) , ( 4 , 3.0 ) ] ;
113+ let vec = SparseVector :: from_pairs ( pairs , 6 ) ;
117114 assert_eq ! ( vec![ 1.0 , 0.0 , 2.0 , 0.0 , 3.0 , 0.0 ] , vec. to_vec( ) ) ;
118115 }
119116}
0 commit comments