Perform numpy exp function in-place

匿名 (未验证) 提交于 2019-12-03 08:54:24

问题:

As in title, I need to perform numpy.exp on a very large ndarray, let's say ar, and store the result in ar itself. Can this operation be performed in-place?

回答1:

You can use the optional outargument of exp:

a = np.array([3.4, 5]) res = np.exp(a, a) print(res is a) print(a) 

Output:

True [  29.96410005  148.4131591 ] 

exp(x[, out])

Calculate the exponential of all elements in the input array.

Returns

out : ndarray Output array, element-wise exponential of x.

Here all elements of a will be replaced by the result of exp. The return value res is the same as a. No new array is created



回答2:

Mike Mueller's answer is good but please note that if your array is of type int32, int, int64 etc., it will throw a TypeError. Thus, a safe way to do this is to typecast your array to float64 or float32 etc., before doing exp like,

In [12]: b Out[12]: array([1, 2, 3, 4, 5], dtype=int32)  In [13]: np.exp(b, b) -------------------------------------------------------------------------- TypeError: ufunc 'exp' output (typecode 'd') could not be coerced to provided  output parameter (typecode 'i') according to the casting rule ''same_kind'' 

Type Casting & exp:

# in-place typecasting In [14]: b = b.astype(np.float64, copy=False) In [15]: b Out[15]: array([ 1.,  2.,  3.,  4.,  5.], dtype=float64)  # modifies b in-place In [16]: np.exp(b, b) Out[16]: array([   2.718,    7.389,   20.086,   54.598,  148.413], dtype=float64) 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!