如何为 sigmoid 函数删除 python 中的这些循环

how to remove these loops in python for sigmoid function

def sigmoid(a):
    g = a
    for i in range(a.shape[0]):
        for j in range(a.shape[1]):
            if a[i][j] >= 0:
                z = np.exp(-a[i][j])
                g[i][j] = 1 / (1 + z)
            else:
                z = np.exp(a[i][j])
                g[i][j] = 1 / (1 + z)
    return g

我该如何改进这段代码?这些循环花费了太多时间。 我尝试了以下代码

def sigmoid(a):
    if a > 0:
       z = np.exp(-a)
       return 1/(1+z)
    else:
       z = np.exp(a)
       return 1/(1+z)

但它不适用于二维数组甚至一维数组,在 if 语句中给出错误。

if a > 0: ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

abs(a) 给出了 numpy 数组中每个元素的绝对值,所以你可以简单地使用:

def sigmoid(a):
    z = np.exp(-abs(a))
    return 1/(1+z)