执行 numpy exp 函数 in-place
Perform numpy exp function in-place
如标题所示,我需要在非常大的 ndarray 上执行 numpy.exp
,比方说 ar
,并将结果存储在 ar
本身中。这个操作可以执行吗in-place?
您可以使用 exp
的可选 out
参数:
a = np.array([3.4, 5])
res = np.exp(a, a)
print(res is a)
print(a)
输出:
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
.
此处 a
的所有元素将被 exp
的结果替换。 return 值 res
与 a
相同。没有创建新数组
答案很好,但请注意,如果您的数组是 int32
、int
、int64
等类型,它将抛出 TypeError
.因此,一个安全的方法是将数组类型转换为 float64
或 float32
等,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''
类型转换和经验值:
# 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)
如标题所示,我需要在非常大的 ndarray 上执行 numpy.exp
,比方说 ar
,并将结果存储在 ar
本身中。这个操作可以执行吗in-place?
您可以使用 exp
的可选 out
参数:
a = np.array([3.4, 5])
res = np.exp(a, a)
print(res is a)
print(a)
输出:
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
.
此处 a
的所有元素将被 exp
的结果替换。 return 值 res
与 a
相同。没有创建新数组
int32
、int
、int64
等类型,它将抛出 TypeError
.因此,一个安全的方法是将数组类型转换为 float64
或 float32
等,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''
类型转换和经验值:
# 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)