]> gitweb.factorcode.org Git - factor.git/commitdiff
math.statistics: adding cumulative versions of sum, product, min, and max.
authorJohn Benediktsson <mrjbq7@gmail.com>
Thu, 12 Apr 2012 17:30:16 +0000 (10:30 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Thu, 12 Apr 2012 17:30:16 +0000 (10:30 -0700)
basis/math/statistics/statistics-docs.factor
basis/math/statistics/statistics-tests.factor
basis/math/statistics/statistics.factor

index a86709c7be0907deba949da43f82b6b82ad11470..129125d7c3d063435734e17bb52b6f757c8bea1d 100644 (file)
@@ -174,6 +174,46 @@ HELP: sequence>hashtable
     }
 } ;
 
+HELP: cum-sum
+{ $values { "seq" sequence } { "seq'" sequence } }
+{ $description "Returns the cumulative sum of " { $snippet "seq" } "." }
+{ $examples
+    { $example "USING: math.statistics prettyprint ;"
+               "{ 1 -1 2 -1 4 } cum-sum ."
+               "{ 1 0 2 1 5 }"
+    }
+} ;
+
+HELP: cum-product
+{ $values { "seq" sequence } { "seq'" sequence } }
+{ $description "Returns the cumulative product of " { $snippet "seq" } "." }
+{ $examples
+    { $example "USING: math.statistics prettyprint ;"
+               "{ 1 2 3 4 } cum-product ."
+               "{ 1 2 6 24 }"
+    }
+} ;
+
+HELP: cum-min
+{ $values { "seq" sequence } { "seq'" sequence } }
+{ $description "Returns the cumulative min of " { $snippet "seq" } "." }
+{ $examples
+    { $example "USING: math.statistics prettyprint ;"
+               "{ 5 3 4 1 } cum-min ."
+               "{ 5 3 3 1 }"
+    }
+} ;
+
+HELP: cum-max
+{ $values { "seq" sequence } { "seq'" sequence } }
+{ $description "Returns the cumulative max of " { $snippet "seq" } "." }
+{ $examples
+    { $example "USING: math.statistics prettyprint ;"
+               "{ 1 -1 3 5 } cum-max ."
+               "{ 1 1 3 5 }"
+    }
+} ;
+
 ARTICLE: "histogram" "Computing histograms"
 "Counting elements in a sequence:"
 { $subsections
index 5b7606eab6d213dd35d21a4ca51c10e2a1b01efa..67323f0a41e137f73ddc4e4f05e482c4d302a437 100644 (file)
@@ -71,3 +71,8 @@ IN: math.statistics.tests
 
 [ 1.0 ] [ { 1 2 3 } { 1 2 3 } corr ] unit-test
 [ -1.0 ] [ { 1 2 3 } { -4 -5 -6 } corr ] unit-test
+
+[ { 1 2 4 7 } ] [ { 1 1 2 3 } cum-sum ] unit-test
+[ { 1 1 2 6 } ] [ { 1 1 2 3 } cum-product ] unit-test
+[ { 5 3 3 1 } ] [ { 5 3 4 1 } cum-min ] unit-test
+[ { 1 3 3 5 } ] [ { 1 3 1 5 } cum-max ] unit-test
index f14a2c368029d06aa36ca5282e2f52ac0e09f980..d0f203f5c72c878d57ac7cae6f46ffacefea4ad3 100644 (file)
@@ -156,3 +156,15 @@ ERROR: empty-sequence ;
 
 : corr ( {x} {y} -- corr )
      [ cov ] [ [ var ] bi@ * sqrt ] 2bi / ;
+
+: cum-sum ( seq -- seq' )
+    0 swap [ + dup ] map nip ;
+
+: cum-product ( seq -- seq' )
+    1 swap [ * dup ] map nip ;
+
+: cum-min ( seq -- seq' )
+    [ ?first ] keep [ min dup ] map nip ;
+
+: cum-max ( seq -- seq' )
+    [ ?first ] keep [ max dup ] map nip ;