Mercurial > hg > tvii
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))