diff tvii/dataset/line.py @ 87:9d5a5e9f5c3b

add kmeans + dataset
author Jeff Hammel <k0scist@gmail.com>
date Sun, 17 Dec 2017 14:05:57 -0800
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tvii/dataset/line.py	Sun Dec 17 14:05:57 2017 -0800
@@ -0,0 +1,57 @@
+# -*- coding: utf-8 -*-
+
+"""
+generate a line segment
+"""
+
+import sys
+from .cli import DatasetGenerationParser
+
+
+def x_range(x_min, x_max, n):
+    """1-D range function"""
+
+    dx = (x_max - x_min)/(n - 1.)
+    return [x_min + dx*i for i in range(n)]
+
+
+class Line(object):
+    """linear dataset"""
+
+    # TODO: should woprk in `D` dimensions
+    def __init__(self, W, b):
+        self.W = W
+        self.b = b
+
+    def y(self, x):
+        return self.W*x + self.b
+
+    def __call__(self, *x):
+        return [self.y(_x) for _x in x]
+
+
+def main(args=sys.argv[1:]):
+    """CLI"""
+
+    # parse command line
+    parser = DatasetGenerationParser(description=__doc__)
+    parser.add_argument('W', type=float,
+                        help="slope")
+    parser.add_argument('b', type=float,
+                        help="offset")
+    parser.add_argument('-x', dest='x_range', type=float,
+                        nargs=2, metavar=('MIN', 'MAX'), default=(0., 1.),
+                        help="range of `x`")
+    options = parser.parse_args(args)
+
+    # instantiate line generator
+    line = Line(options.W, options.b)
+
+    # generate `x`
+    x = x_range(options.x_range[0], options.x_range[1], options.number)
+
+    # generate `y`
+    y = line(*x)
+
+    # output points
+    parser.writer().writerows(zip(x, y))