提交 76e85db4 authored 作者: James Bergstra's avatar James Bergstra

converted to _scal_elemwise

上级 5deb979e
...@@ -691,25 +691,13 @@ def argmax(x, axis=None): ...@@ -691,25 +691,13 @@ def argmax(x, axis=None):
# Comparison # Comparison
########################## ##########################
def _elemwise_macro(scalar_op, *args):
straight = elemwise.Elemwise(scalar_op)
return straight(*args)
def _elemwise_macro_inplace(scalar_op, *args):
#construct an inplace version of the scalar op
inplace_scalar_op = scalar_op.__class__(scal.transfer_type(0))
inplace = elemwise.Elemwise(inplace_scalar_op, {0: 0})
return inplace(*args)
@_scal_elemwise @_scal_elemwise
def lt(a, b): def lt(a, b):
"""a < b""" """a < b"""
return _elemwise_macro(scal.lt, a, b)
@_scal_elemwise @_scal_elemwise
def _lt_inplace(a,b): def _lt_inplace(a,b):
"""a < b (inplace on a)""" """a < b (inplace on a)"""
return _elemwise_macro_inplace(scal.lt, a, b)
@_scal_elemwise @_scal_elemwise
def gt(a, b): def gt(a, b):
...@@ -805,55 +793,120 @@ def _abs(*a): ...@@ -805,55 +793,120 @@ def _abs(*a):
def __abs_inplace(a): def __abs_inplace(a):
"""|a| (inplace on a)""" """|a| (inplace on a)"""
exp, _exp_inplace = _elemwise(scal.exp, 'exp', @_scal_elemwise
"""exponential (elemwise)""") def exp(a):
"""e^a"""
@_scal_elemwise
def _exp_inplace(a):
"""e^a (inplace on a)"""
neg, _neg_inplace = _elemwise(scal.neg, 'neg', @_scal_elemwise
"""negative (elemwise)""") def neg(a):
"""-a"""
@_scal_elemwise
def _neg_inplace(a):
"""-a (inplace on a)"""
inv, _inv_inplace = _elemwise(scal.inv, 'inv', @_scal_elemwise
"""multiplicative inverse (elemwise)""") def inv(a):
"""1.0/a (inplace on a)"""
@_scal_elemwise
def _inv_inplace(a):
"""1.0/a (inplace on a)"""
log, _log_inplace = _elemwise(scal.log, 'log', @_scal_elemwise
"""logarithm base-e (elemwise)""") def log(a):
"""base e logarithm of a"""
@_scal_elemwise
def _log_inplace(a):
"""base e logarithm of a (inplace on a)"""
log2, _log2_inplace = _elemwise(scal.log2, 'log2', @_scal_elemwise
"""logarithm base-2 (elemwise)""") def log2(a):
"""base 2 logarithm of a"""
@_scal_elemwise
def _log2_inplace(a):
"""base 2 logarithm of a (inplace on a)"""
sgn, _sgn_inplace = _elemwise(scal.sgn, 'sgn', @_scal_elemwise
"""sign (elemwise)""") def sgn(a):
"""sign of a"""
@_scal_elemwise
def _sgn_inplace(a):
"""sign of `a` (inplace on `a`)"""
sqr, _sqr_inplace = _elemwise(scal.sqr, 'sqr', @_scal_elemwise
"""square (elemwise)""") def sqr(a):
"""square of a"""
@_scal_elemwise
def _sqr_inplace(a):
"""square of `a` (inplace on `a`)"""
sqrt, _sqrt_inplace = _elemwise(scal.sqrt, 'sqrt', @_scal_elemwise
"""square root (elemwise)""") def sqrt(a):
"""square root of a"""
@_scal_elemwise
def _sqrt_inplace(a):
"""square root of `a` (inplace on `a`)"""
cos, _cos_inplace = _elemwise(scal.cos, 'cos', @_scal_elemwise
"""cosine (elemwise)""") def cos(a):
"""cosine of a"""
@_scal_elemwise
def _cos_inplace(a):
"""cosine of `a` (inplace on `a`)"""
sin, _sin_inplace = _elemwise(scal.sin, 'sin', @_scal_elemwise
"""sine (elemwise)""") def sin(a):
"""sine of a"""
@_scal_elemwise
def _sin_inplace(a):
"""sine of `a` (inplace on `a`)"""
tan, _tan_inplace = _elemwise(scal.tan, 'tan', @_scal_elemwise
"""tan = sin/cos (elemwise)""") def tan(a):
"""tangent of a"""
@_scal_elemwise
def _tan_inplace(a):
"""tangent of `a` (inplace on `a`)"""
cosh, _cosh_inplace = _elemwise(scal.cosh, 'cosh', @_scal_elemwise
"""hyperbolic cosine (elemwise)""") def cosh(a):
"""hyperbolic cosine of a"""
@_scal_elemwise
def _cosh_inplace(a):
"""hyperbolic cosine of `a` (inplace on `a`)"""
sinh, _sinh_inplace = _elemwise(scal.sinh, 'sinh', @_scal_elemwise
"""hyperbolic sine (elemwise)""") def sinh(a):
"""hyperbolic sine of a"""
@_scal_elemwise
def _sinh_inplace(a):
"""hyperbolic sine of `a` (inplace on `a`)"""
tanh, _tanh_inplace = _elemwise(scal.tanh, 'tanh', @_scal_elemwise
"""hyperbolic tangent (elemwise)""") def tanh(a):
"""hyperbolic tangent of a"""
@_scal_elemwise
def _tanh_inplace(a):
"""hyperbolic tangent of `a` (inplace on `a`)"""
########################## ##########################
# Misc # Misc
########################## ##########################
fill, _fill_inplace = _elemwise(scal.second, 'fill', #fill, _fill_inplace = _elemwise(scal.second, 'fill',
"""fill WRITEME (elemwise)""") #"""fill WRITEME (elemwise)""")
@_scal_elemwise
def second(a, b):
"""Create a matrix by filling the shape of a with b"""
@_scal_elemwise
def _second_inplace(a):
"""Fill `a` with `b`"""
fill = second
_fill_inplace = _second_inplace
@constructor @constructor
def ones_like(model): def ones_like(model):
...@@ -920,11 +973,13 @@ def one(): ...@@ -920,11 +973,13 @@ def one():
return Ones(0)([]) return Ones(0)([])
tensor_copy = elemwise.Elemwise(scal.identity) @_epydoc_cheat(elemwise.Elemwise(scal.identity))
"""Copy a tensor""" def tensor_copy(a):
"""Create a duplicate of `a` (with duplicated storage)"""
identity = elemwise.Elemwise(scal.identity, inplace_pattern = {0: [0]}) @_epydoc_cheat(elemwise.Elemwise(scal.identity, inplace_pattern = {0: [0]}))
"""Do nothing (elemwise)""" def view(a):
"""Create a duplicate of `a` (with shared storage)"""
@constructor @constructor
def sum(input, axis = None): def sum(input, axis = None):
...@@ -969,23 +1024,47 @@ repeat = Repeat() ...@@ -969,23 +1024,47 @@ repeat = Repeat()
# Arithmetics # Arithmetics
########################## ##########################
add, _add_inplace = _elemwise(scal.add, 'add', @_scal_elemwise
"""addition (element-wise)""") def add(a, b):
"""elementwise addition"""
@_scal_elemwise
def _add_inplace(a, b):
"""elementwise addition (inplace on `a`)"""
sub, _sub_inplace = _elemwise(scal.sub, 'sub', @_scal_elemwise
"""subtraction (elemwise)""") def sub(a, b):
"""elementwise subtraction"""
@_scal_elemwise
def _sub_inplace(a, b):
"""elementwise subtraction (inplace on `a`)"""
mul, _mul_inplace = _elemwise(scal.mul, 'mul', @_scal_elemwise
"""multiplication (elemwise)""") def mul(a, b):
"""elementwise multiplication"""
@_scal_elemwise
def _mul_inplace(a, b):
"""elementwise multiplication (inplace on `a`)"""
div, _div_inplace = _elemwise(scal.div, 'div', @_scal_elemwise
"""division (elemwise)""") def div(a, b):
"""elementwise division"""
@_scal_elemwise
def _div_inplace(a, b):
"""elementwise division (inplace on `a`)"""
mod, _mod_inplace = _elemwise(scal.mod, 'mod', @_scal_elemwise
"""modulo (elemwise)""") def mod(a, b):
"""elementwise modulo"""
@_scal_elemwise
def _mod_inplace(a, b):
"""elementwise modulo (inplace on `a`)"""
pow, _pow_inplace = _elemwise(scal.pow, 'pow', @_scal_elemwise
"""raise to given exponent (elemwise)""") def pow(a, b):
"""elementwise power"""
@_scal_elemwise
def _pow_inplace(a, b):
"""elementwise power (inplace on `a`)"""
########################## ##########################
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论