python - 有没有一种方法可以在不使用循环的情况下获取列表的每个元素?

标签 python python-3.x numpy numpy-ndarray

我在我教授的一本书中找到了这个任务:

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.expnp.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/

相关文章:

python - 为什么 len 在 DataFrame 上比在底层 numpy 数组上效率高得多?

python - Scipy:链接标签到输出 Z

python - numpy:在 true_divide 中遇到无效值

python - 值错误: malformed node or string error when parsing lists from a text file

python-3.x - Python asyncio - 循环退出,任务已被销毁,但正在挂起

python - collections.abc 的实现不一致

python - 获取并显示 numpy 数组中一堆 3 channel 图像中的一个图像

python - ORM 类/对象的 SQLAlchemy 自省(introspection)

Python - 查找字符串中的所有非字母数字字符

python - SWIG/python 数组内部结构