@@ -336,7 +336,12 @@ impl<'a, TX: Number + RealNumber, TY: Number + Ord, X: Array2<TX> + 'a, Y: Array
336
336
fn predict_for_row ( & self , x : & [ TX ] ) -> TX {
337
337
let mut f = self . b . unwrap ( ) ;
338
338
339
+ let xi: Vec < _ > = x. iter ( ) . map ( |e| e. to_f64 ( ) . unwrap ( ) ) . collect ( ) ;
339
340
for i in 0 ..self . instances . as_ref ( ) . unwrap ( ) . len ( ) {
341
+ let xj: Vec < _ > = self . instances . as_ref ( ) . unwrap ( ) [ i]
342
+ . iter ( )
343
+ . map ( |e| e. to_f64 ( ) . unwrap ( ) )
344
+ . collect ( ) ;
340
345
f += self . w . as_ref ( ) . unwrap ( ) [ i]
341
346
* TX :: from (
342
347
self . parameters
@@ -345,13 +350,7 @@ impl<'a, TX: Number + RealNumber, TY: Number + Ord, X: Array2<TX> + 'a, Y: Array
345
350
. kernel
346
351
. as_ref ( )
347
352
. unwrap ( )
348
- . apply (
349
- & x. iter ( ) . map ( |e| e. to_f64 ( ) . unwrap ( ) ) . collect ( ) ,
350
- & self . instances . as_ref ( ) . unwrap ( ) [ i]
351
- . iter ( )
352
- . map ( |e| e. to_f64 ( ) . unwrap ( ) )
353
- . collect ( ) ,
354
- )
353
+ . apply ( & xi, & xj)
355
354
. unwrap ( ) ,
356
355
)
357
356
. unwrap ( ) ;
@@ -544,15 +543,14 @@ impl<'a, TX: Number + RealNumber, TY: Number + Ord, X: Array2<TX>, Y: Array1<TY>
544
543
let mut cache_values: Vec < ( ( usize , usize ) , TX ) > = Vec :: new ( ) ;
545
544
546
545
for v in self . sv . iter ( ) {
546
+ let xi: Vec < _ > = v. x . iter ( ) . map ( |e| e. to_f64 ( ) . unwrap ( ) ) . collect ( ) ;
547
+ let xj: Vec < _ > = x. iter ( ) . map ( |e| e. to_f64 ( ) . unwrap ( ) ) . collect ( ) ;
547
548
let k = self
548
549
. parameters
549
550
. kernel
550
551
. as_ref ( )
551
552
. unwrap ( )
552
- . apply (
553
- & v. x . iter ( ) . map ( |e| e. to_f64 ( ) . unwrap ( ) ) . collect ( ) ,
554
- & x. iter ( ) . map ( |e| e. to_f64 ( ) . unwrap ( ) ) . collect ( ) ,
555
- )
553
+ . apply ( & xi, & xj)
556
554
. unwrap ( ) ;
557
555
cache_values. push ( ( ( i, v. index ) , TX :: from ( k) . unwrap ( ) ) ) ;
558
556
g -= v. alpha * k;
@@ -571,7 +569,7 @@ impl<'a, TX: Number + RealNumber, TY: Number + Ord, X: Array2<TX>, Y: Array1<TY>
571
569
cache. insert ( v. 0 , v. 1 . to_f64 ( ) . unwrap ( ) ) ;
572
570
}
573
571
574
- let x_f64 = x. iter ( ) . map ( |e| e. to_f64 ( ) . unwrap ( ) ) . collect ( ) ;
572
+ let x_f64: Vec < _ > = x. iter ( ) . map ( |e| e. to_f64 ( ) . unwrap ( ) ) . collect ( ) ;
575
573
let k_v = self
576
574
. parameters
577
575
. kernel
@@ -694,8 +692,10 @@ impl<'a, TX: Number + RealNumber, TY: Number + Ord, X: Array2<TX>, Y: Array1<TY>
694
692
let km = sv1. k ;
695
693
let gm = sv1. grad ;
696
694
let mut best = 0f64 ;
695
+ let xi: Vec < _ > = sv1. x . iter ( ) . map ( |e| e. to_f64 ( ) . unwrap ( ) ) . collect ( ) ;
697
696
for i in 0 ..self . sv . len ( ) {
698
697
let v = & self . sv [ i] ;
698
+ let xj: Vec < _ > = v. x . iter ( ) . map ( |e| e. to_f64 ( ) . unwrap ( ) ) . collect ( ) ;
699
699
let z = v. grad - gm;
700
700
let k = cache. get (
701
701
sv1,
@@ -704,10 +704,7 @@ impl<'a, TX: Number + RealNumber, TY: Number + Ord, X: Array2<TX>, Y: Array1<TY>
704
704
. kernel
705
705
. as_ref ( )
706
706
. unwrap ( )
707
- . apply (
708
- & sv1. x . iter ( ) . map ( |e| e. to_f64 ( ) . unwrap ( ) ) . collect ( ) ,
709
- & v. x . iter ( ) . map ( |e| e. to_f64 ( ) . unwrap ( ) ) . collect ( ) ,
710
- )
707
+ . apply ( & xi, & xj)
711
708
. unwrap ( ) ,
712
709
) ;
713
710
let mut curv = km + v. k - 2f64 * k;
@@ -725,6 +722,12 @@ impl<'a, TX: Number + RealNumber, TY: Number + Ord, X: Array2<TX>, Y: Array1<TY>
725
722
}
726
723
}
727
724
725
+ let xi: Vec < _ > = self . sv [ idx_1]
726
+ . x
727
+ . iter ( )
728
+ . map ( |e| e. to_f64 ( ) . unwrap ( ) )
729
+ . collect :: < Vec < _ > > ( ) ;
730
+
728
731
idx_2. map ( |idx_2| {
729
732
(
730
733
idx_1,
@@ -735,16 +738,12 @@ impl<'a, TX: Number + RealNumber, TY: Number + Ord, X: Array2<TX>, Y: Array1<TY>
735
738
. as_ref ( )
736
739
. unwrap ( )
737
740
. apply (
738
- & self . sv [ idx_1]
739
- . x
740
- . iter ( )
741
- . map ( |e| e. to_f64 ( ) . unwrap ( ) )
742
- . collect ( ) ,
741
+ & xi,
743
742
& self . sv [ idx_2]
744
743
. x
745
744
. iter ( )
746
745
. map ( |e| e. to_f64 ( ) . unwrap ( ) )
747
- . collect ( ) ,
746
+ . collect :: < Vec < _ > > ( ) ,
748
747
)
749
748
. unwrap ( )
750
749
} ) ,
@@ -758,8 +757,11 @@ impl<'a, TX: Number + RealNumber, TY: Number + Ord, X: Array2<TX>, Y: Array1<TY>
758
757
let km = sv2. k ;
759
758
let gm = sv2. grad ;
760
759
let mut best = 0f64 ;
760
+
761
+ let xi: Vec < _ > = sv2. x . iter ( ) . map ( |e| e. to_f64 ( ) . unwrap ( ) ) . collect ( ) ;
761
762
for i in 0 ..self . sv . len ( ) {
762
763
let v = & self . sv [ i] ;
764
+ let xj: Vec < _ > = v. x . iter ( ) . map ( |e| e. to_f64 ( ) . unwrap ( ) ) . collect ( ) ;
763
765
let z = gm - v. grad ;
764
766
let k = cache. get (
765
767
sv2,
@@ -768,10 +770,7 @@ impl<'a, TX: Number + RealNumber, TY: Number + Ord, X: Array2<TX>, Y: Array1<TY>
768
770
. kernel
769
771
. as_ref ( )
770
772
. unwrap ( )
771
- . apply (
772
- & sv2. x . iter ( ) . map ( |e| e. to_f64 ( ) . unwrap ( ) ) . collect ( ) ,
773
- & v. x . iter ( ) . map ( |e| e. to_f64 ( ) . unwrap ( ) ) . collect ( ) ,
774
- )
773
+ . apply ( & xi, & xj)
775
774
. unwrap ( ) ,
776
775
) ;
777
776
let mut curv = km + v. k - 2f64 * k;
@@ -790,6 +789,12 @@ impl<'a, TX: Number + RealNumber, TY: Number + Ord, X: Array2<TX>, Y: Array1<TY>
790
789
}
791
790
}
792
791
792
+ let xj: Vec < _ > = self . sv [ idx_2]
793
+ . x
794
+ . iter ( )
795
+ . map ( |e| e. to_f64 ( ) . unwrap ( ) )
796
+ . collect ( ) ;
797
+
793
798
idx_1. map ( |idx_1| {
794
799
(
795
800
idx_1,
@@ -804,12 +809,8 @@ impl<'a, TX: Number + RealNumber, TY: Number + Ord, X: Array2<TX>, Y: Array1<TY>
804
809
. x
805
810
. iter ( )
806
811
. map ( |e| e. to_f64 ( ) . unwrap ( ) )
807
- . collect ( ) ,
808
- & self . sv [ idx_2]
809
- . x
810
- . iter ( )
811
- . map ( |e| e. to_f64 ( ) . unwrap ( ) )
812
- . collect ( ) ,
812
+ . collect :: < Vec < _ > > ( ) ,
813
+ & xj,
813
814
)
814
815
. unwrap ( )
815
816
} ) ,
@@ -828,12 +829,12 @@ impl<'a, TX: Number + RealNumber, TY: Number + Ord, X: Array2<TX>, Y: Array1<TY>
828
829
. x
829
830
. iter ( )
830
831
. map ( |e| e. to_f64 ( ) . unwrap ( ) )
831
- . collect ( ) ,
832
+ . collect :: < Vec < _ > > ( ) ,
832
833
& self . sv [ idx_2]
833
834
. x
834
835
. iter ( )
835
836
. map ( |e| e. to_f64 ( ) . unwrap ( ) )
836
- . collect ( ) ,
837
+ . collect :: < Vec < _ > > ( ) ,
837
838
)
838
839
. unwrap ( ) ,
839
840
) ) ,
@@ -888,18 +889,18 @@ impl<'a, TX: Number + RealNumber, TY: Number + Ord, X: Array2<TX>, Y: Array1<TY>
888
889
self . sv [ v1] . alpha -= step. to_f64 ( ) . unwrap ( ) ;
889
890
self . sv [ v2] . alpha += step. to_f64 ( ) . unwrap ( ) ;
890
891
892
+ let xi_v1: Vec < _ > = self . sv [ v1] . x . iter ( ) . map ( |e| e. to_f64 ( ) . unwrap ( ) ) . collect ( ) ;
893
+ let xi_v2: Vec < _ > = self . sv [ v2] . x . iter ( ) . map ( |e| e. to_f64 ( ) . unwrap ( ) ) . collect ( ) ;
891
894
for i in 0 ..self . sv . len ( ) {
895
+ let xj: Vec < _ > = self . sv [ i] . x . iter ( ) . map ( |e| e. to_f64 ( ) . unwrap ( ) ) . collect ( ) ;
892
896
let k2 = cache. get (
893
897
& self . sv [ v2] ,
894
898
& self . sv [ i] ,
895
899
self . parameters
896
900
. kernel
897
901
. as_ref ( )
898
902
. unwrap ( )
899
- . apply (
900
- & self . sv [ v2] . x . iter ( ) . map ( |e| e. to_f64 ( ) . unwrap ( ) ) . collect ( ) ,
901
- & self . sv [ i] . x . iter ( ) . map ( |e| e. to_f64 ( ) . unwrap ( ) ) . collect ( ) ,
902
- )
903
+ . apply ( & xi_v2, & xj)
903
904
. unwrap ( ) ,
904
905
) ;
905
906
let k1 = cache. get (
@@ -909,10 +910,7 @@ impl<'a, TX: Number + RealNumber, TY: Number + Ord, X: Array2<TX>, Y: Array1<TY>
909
910
. kernel
910
911
. as_ref ( )
911
912
. unwrap ( )
912
- . apply (
913
- & self . sv [ v1] . x . iter ( ) . map ( |e| e. to_f64 ( ) . unwrap ( ) ) . collect ( ) ,
914
- & self . sv [ i] . x . iter ( ) . map ( |e| e. to_f64 ( ) . unwrap ( ) ) . collect ( ) ,
915
- )
913
+ . apply ( & xi_v1, & xj)
916
914
. unwrap ( ) ,
917
915
) ;
918
916
self . sv [ i] . grad -= step. to_f64 ( ) . unwrap ( ) * ( k2 - k1) ;
0 commit comments