我在教授的书中找到了这个任务:
def f(x):
return f = log(exp(z))
def problem(M: List)
return np.array([f(x) for x in M])
如何实施解决方案?
Numpy就是要对整个阵列执行操作。您的教授希望您使用该功能。
首先将列表M
转换为array z
:
z = np.array(M)
现在,您可以执行类似于元素的操作exp
并记录:
e = np.exp(z)
f = 1 + e
g = np.log(f)
函数np.exp
和np.log
被应用于数组的每个元素。如果输入不是数组,则将其转换为一个。
类似的操作也1 + e
可以在整个阵列上工作,在这种情况下,使用广播的魔力。由于1
是标量,因此可以明确地将其扩展为与相同的形状e
,并且可以通过进行添加np.add
。
通常,操作序列可以压缩为一行,类似于您最初的尝试。您可以使用np.log1p
以下方法稍微减少操作次数:
def f(x):
return np.log1p(np.exp(x))
请注意,我没有先转换x
为数组,因为np.exp
它将为您完成此操作。
这种幼稚的方法的一个基本问题是,np.exp
它将溢出我们期望会获得合理结果的值。可以使用此答案中的技术解决:
def f(x):
return np.log1p(np.exp(-np.abs(x))) + np.maximum(x, 0)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句