@@ -2757,7 +2757,110 @@ def get_z(x, y):
2757
2757
np .testing .assert_array_equal (np .ma .getmask (zi ),
2758
2758
np .ma .getmask (correct_zi_masked ))
2759
2759
2760
+ #-----------------------------------------------------------------
2761
+ #-----------------------------------------------------------------
2760
2762
2763
+ class ksdensity_test ():
2764
+ def test_kde_integer_input (self ):
2765
+ """Regression test for #1181."""
2766
+ x1 = np .arange (5 )
2767
+ kde = mlab .ksdensity (x1 + x1 )
2768
+ y_expected = [0.13480721 , 0.18222869 , 0.19514935 , 0.18222869 , 0.13480721 ]
2769
+ assert_array_almost_equal (kde ["result" ], y_expected , decimal = 6 )
2770
+
2771
+ @knownfailureif (True )
2772
+ def test_gaussian_kde_covariance_caching (self ):
2773
+ x1 = np .array ([- 7 , - 5 , 1 , 4 , 5 ], dtype = np .float )
2774
+ xs = np .linspace (- 10 , 10 , num = 5 )
2775
+ # These expected values are from scipy 0.10, before some changes to
2776
+ # gaussian_kde. They were not compared with any external reference.
2777
+ y_expected = [0.02463386 , 0.04689208 , 0.05395444 , 0.05337754 , 0.01664475 ]
2778
+
2779
+ # Set the bandwidth, then reset it to the default.
2780
+ kde = mlab .ksdensity (x1 , 0.5 )
2781
+ y2 = kde ['result' ]
2782
+
2783
+ assert_array_almost_equal (y_expected , y2 , decimal = 7 )
2784
+
2785
+ kde = mlab .ksdensity (xs , 'scott' )
2786
+ y2 = kde ['result' ]
2787
+
2788
+ assert_array_almost_equal (y_expected , y2 , decimal = 7 )
2789
+
2790
+ @knownfailureif (True )
2791
+ def test_gaussian_kde_subclassing (self ):
2792
+ x1 = np .array ([- 7 , - 5 , 1 , 4 , 5 ], dtype = np .float )
2793
+ xs = np .linspace (- 10 , 10 , num = 50 )
2794
+
2795
+ # gaussian_kde itself
2796
+ kde = mlab .ksdensity (xs )
2797
+ ys = kde ['result' ]
2798
+
2799
+ y_expected = [0.06292987 , 0.06346938 , 0.05860291 , 0.08657652 , 0.07904017 ]
2800
+
2801
+ assert_array_almost_equal (y_expected , ys , decimal = 6 )
2802
+
2803
+
2804
+ @knownfailureif (True )
2805
+ def test_kde_1d (self ):
2806
+ #some basic tests comparing to normal distribution
2807
+ np .random .seed (8765678 )
2808
+ n_basesample = 500
2809
+ xn = np .random .randn (n_basesample )
2810
+ xnmean = xn .mean ()
2811
+ xnstd = xn .std (ddof = 1 )
2812
+
2813
+ xs = np .linspace (- 7 , 7 , 501 )
2814
+
2815
+ # get kde for original sample
2816
+ gkde = mlab .ksdensity (xn )
2817
+
2818
+ # evaluate the density function for the kde for some points
2819
+ kdepdf = gkde ['result' ]
2820
+ intervall = xs [1 ] - xs [0 ]
2821
+
2822
+ normpdf = np .random .normal (loc = xnmean , scale = xnstd )
2823
+
2824
+ assert_ (np .sum ((kdepdf - normpdf )** 2 )* intervall < 0.01 )
2825
+ prob1 = gkde .integrate_box_1d (xnmean , np .inf )
2826
+ prob2 = gkde .integrate_box_1d (- np .inf , xnmean )
2827
+ assert_almost_equal (prob1 , 0.5 , decimal = 1 )
2828
+ assert_almost_equal (prob2 , 0.5 , decimal = 1 )
2829
+ assert_almost_equal (gkde .integrate_box (xnmean , np .inf ), prob1 , decimal = 13 )
2830
+ assert_almost_equal (gkde .integrate_box (- np .inf , xnmean ), prob2 , decimal = 13 )
2831
+
2832
+ assert_almost_equal (gkde .integrate_kde (gkde ),
2833
+ (kdepdf ** 2 ).sum ()* intervall , decimal = 2 )
2834
+ assert_almost_equal (gkde .integrate_gaussian (xnmean , xnstd ** 2 ),
2835
+ (kdepdf * normpdf ).sum ()* intervall , decimal = 2 )
2836
+
2837
+ def test_kde_bandwidth_method (self ):
2838
+
2839
+ np .random .seed (8765678 )
2840
+ n_basesample = 50
2841
+ xn = np .random
8000
.randn (n_basesample )
2842
+
2843
+ # Default
2844
+ gkde = mlab .ksdensity (xn )
2845
+ # Supply a callable
2846
+ gkde2 = mlab .ksdensity (xn , 'scott' )
2847
+ assert_almost_equal (gkde ['result' ].all (), gkde2 ['result' ].all ())
2848
+ # Supply a scalar
2849
+ #gkde3 = mlab.ksdensity(xn, bw_method=gkde.factor)
2850
+
2851
+ xs = np .linspace (- 7 ,7 ,51 )
2852
+ kdepdf = mlab .ksdensity (xs )
2853
+ kdepdf2 = mlab .ksdensity (xs , 'scott' )
2854
+ #kdepdf3 = gkde3.evaluate(xs)
2855
+ #assert_almost_equal(kdepdf, kdepdf3)
2856
+
2857
+ assert_raises (ValueError , mlab .ksdensity , xn , bw_method = 'wrongstring' )
2858
+
2859
+
2860
+
2861
+
2862
+ #-----------------------------------------------------------------
2863
+ #
4750
-----------------------------------------------------------------
2761
2864
if __name__ == '__main__' :
2762
2865
import nose
2763
2866
import sys
0 commit comments