提交 4b909254 authored 作者: Nicolas Bouchard's avatar Nicolas Bouchard

Wrap exp2 from numpy, elemwise.

上级 dc1a1ae6
......@@ -1944,6 +1944,25 @@ class Exp(UnaryScalarOp):
exp = Exp(upgrade_to_float, name='exp')
class Exp2(UnaryScalarOp):
def impl(self, x):
return numpy.exp2(x)
def grad(self, (x, ), (gz, )):
if x.type in complex_types:
raise NotImplementedError()
elif x.type in float_types:
return gz * exp2(x) * log(numpy.cast[x.type](2)),
else:
return None,
def c_code(self, node, name, (x, ), (z, ), sub):
if node.inputs[0].type in complex_types:
raise NotImplementedError('type not supported', type)
return "%(z)s = exp2(%(x)s);" % locals()
exp2 = Exp2(upgrade_to_float, name='exp2')
class Sqr(UnaryScalarOp):
def impl(self, x):
return x * x
......
......@@ -2477,6 +2477,11 @@ def exp(a):
"""e^`a`"""
@_scal_elemwise_with_nfunc('exp2', 1, 1)
def exp2(a):
"""2^`a`"""
@_scal_elemwise_with_nfunc('negative', 1, 1)
def neg(a):
"""-a"""
......
......@@ -87,6 +87,10 @@ def abs__inplace(a):
def exp_inplace(a):
"""e^`a` (inplace on `a`)"""
@_scal_inplace
def exp2_inplace(a):
"""2^`a` (inplace on `a`)"""
@_scal_inplace
def neg_inplace(a):
"""-a (inplace on a)"""
......
......@@ -951,6 +951,17 @@ ExpInplaceTester = makeBroadcastTester(op = inplace.exp_inplace,
inplace = True)
Exp2Tester = makeBroadcastTester(op = tensor.exp2,
expected = numpy.exp2,
good = _good_broadcast_unary_normal,
grad = _grad_broadcast_unary_normal)
Exp2InplaceTester = makeBroadcastTester(op = inplace.exp2_inplace,
expected = numpy.exp2,
good = _good_broadcast_unary_normal,
grad = _grad_broadcast_unary_normal,
inplace = True)
_good_broadcast_unary_positive = dict(normal = (rand_ranged(0.001, 5, (2, 3)),),
integers = (randint_ranged(1, 5, (2, 3)),),
complex = (randc128_ranged(1, 5, (2,3)),),
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论