我在我教授的一本书中找到了这个任务:
def f(x):
return f = log(exp(z))
def problem(M: List)
return np.array([f(x) for x in M])
如何实现解决方案?
最佳答案
Numpy 就是对整个数组执行操作。您的教授希望您使用该功能。
首先将列表 M
转换为数组 z
:
z = np.array(M)
现在您可以执行元素操作,例如 exp
和 log:
e = np.exp(z)
f = 1 + e
g = np.log(f)
功能np.exp
和 np.log
应用于数组的每个元素。如果输入不是数组,则会将其转换为数组。
像 1 + e
这样的操作也适用于整个数组,在本例中使用了 broadcasting 的魔力。 。由于1
是一个标量,它可以明确地扩展到与e
相同的形状,并像np.add
一样添加。 .
通常,操作序列可以压缩为一行,类似于您在最初尝试中所做的操作。您可以使用 np.log1p
稍微减少操作次数。 :
def f(x):
return np.log1p(np.exp(x))
请注意,我没有首先将 x
转换为数组,因为 np.exp
会为您执行此操作。
这种简单方法的一个根本问题是,np.exp
会因我们期望获得合理结果的值而溢出。这可以使用 this 中的技术来解决。答案:
def f(x):
return np.log1p(np.exp(-np.abs(x))) + np.maximum(x, 0)
关于python - 有没有一种方法可以在不使用循环的情况下获取列表的每个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58717270/