Added element-wise power fct cpow
diff --git a/generic/THTensorMath.c b/generic/THTensorMath.c
index 4d0c5a0..31a2cbd 100644
--- a/generic/THTensorMath.c
+++ b/generic/THTensorMath.c
@@ -326,6 +326,23 @@
}
}
+void THTensor_(cpow)(THTensor *r_, THTensor *t, THTensor *src)
+{
+ THTensor_(resizeAs)(r_, t);
+ if (THTensor_(isContiguous)(r_) && THTensor_(isContiguous)(t) && THTensor_(isContiguous)(src) && THTensor_(nElement)(r_) == THTensor_(nElement)(src)) {
+ real *tp = THTensor_(data)(t);
+ real *sp = THTensor_(data)(src);
+ real *rp = THTensor_(data)(r_);
+ long sz = THTensor_(nElement)(t);
+ long i;
+ #pragma omp parallel for if(sz > TH_OMP_OVERHEAD_THRESHOLD) private(i)
+ for (i=0; i<sz; i++)
+ rp[i] = pow(tp[i], sp[i]);
+ } else {
+ TH_TENSOR_APPLY3(real, r_, real, t, real, src, *r__data = pow(*t_data, *src_data););
+ }
+}
+
void THTensor_(cdiv)(THTensor *r_, THTensor *t, THTensor *src)
{
THTensor_(resizeAs)(r_, t);
diff --git a/generic/THTensorMath.h b/generic/THTensorMath.h
index d3be61c..f6a31ca 100644
--- a/generic/THTensorMath.h
+++ b/generic/THTensorMath.h
@@ -27,6 +27,7 @@
TH_API void THTensor_(cadd)(THTensor *r_, THTensor *t, real value, THTensor *src);
TH_API void THTensor_(cmul)(THTensor *r_, THTensor *t, THTensor *src);
+TH_API void THTensor_(cpow)(THTensor *r_, THTensor *t, THTensor *src);
TH_API void THTensor_(cdiv)(THTensor *r_, THTensor *t, THTensor *src);
TH_API void THTensor_(addcmul)(THTensor *r_, THTensor *t, real value, THTensor *src1, THTensor *src2);