这个Python函数是如何读取的?

这个Python函数是如何读取的?,python,numpy,Python,Numpy,Wikipedia有下面的示例代码 当我运行它时,它会成功运行。我不明白如何读取lambda函数。特别是,参数x如何引用分子中的数组元素并跨越分母中的所有元素 [注:这个问题大概是重复的,一般是关于lambda。这个问题不一定是关于lambda。它是关于如何阅读np约定。由@Paul Panzer和@Mihai Alexandru Ionut给出的答案都回答了我的问题。很遗憾,在回答问题时,我不能同时检查这两个问题n 为了确认我理解他们的答案(并澄清我的问题是关于什么的): x是整个数组(因为

Wikipedia有下面的示例代码

当我运行它时,它会成功运行。我不明白如何读取
lambda
函数。特别是,参数
x
如何引用分子中的数组元素并跨越分母中的所有元素

[注:这个问题大概是重复的,一般是关于
lambda
。这个问题不一定是关于
lambda
。它是关于如何阅读
np
约定。由@Paul Panzer和@Mihai Alexandru Ionut给出的答案都回答了我的问题。很遗憾,在回答问题时,我不能同时检查这两个问题n

为了确认我理解他们的答案(并澄清我的问题是关于什么的):

  • x
    是整个数组(因为数组是作为参数传递的)
  • np.exp(x)
    返回每个元素被替换为
    np.exp(x[i])
    的数组。将该新数组称为
    x\u new
  • x_new/np.sum(x_new)
    x_new
    的每个元素除以
    x_new
    的和

]lambda表达式类似于。在此上下文中,行

softmax = lambda x : np.exp(x)/np.sum(np.exp(x))
相当于

def softmax(x):
    return np.exp(x)/np.sum(np.exp(x))

lambda表达式类似于

softmax = lambda x : np.exp(x)/np.sum(np.exp(x))
相当于

def softmax(x):
    return np.exp(x)/np.sum(np.exp(x))
我不懂怎么读lambda函数

lambda函数是不绑定到名称的匿名函数

特别是,参数x如何引用中的数组元素 分子和跨度分母中的所有元素

不,参数
x
不是指数组元素,而是指整个数组。
np.exp(x)
方法还返回一个新数组

通过写入
np.exp(x)/np.sum(np.exp(x))
np.exp(x)
生成的数组将被划分为
sum
,这意味着数组中的每个项都将被划分为该和

我不懂怎么读lambda函数

lambda函数是不绑定到名称的匿名函数

特别是,参数x如何引用中的数组元素 分子和跨度分母中的所有元素

不,参数
x
不是指数组元素,而是指整个数组。
np.exp(x)
方法还返回一个新数组

通过写入
np.exp(x)/np.sum(np.exp(x))
,由
np.exp(x)
生成的数组将被划分为
sum
,这意味着数组中的每个项都将被划分为该总和。

三个备注

示例中使用的
lambda
实际上是一种糟糕的风格,参见以下段落:

始终使用def语句而不是 将lambda表达式直接绑定到标识符

是的:

def f(x):返回2*x

否:

f=λx:2*x

第一种形式表示结果函数对象的名称为 特别是“f”而不是泛型“”。这更 通常用于回溯和字符串表示。使用 转让声明中的条款消除了lambda的唯一利益 表达式可以在显式def语句上提供(即它可以 嵌入到更大的表达式中)

内容。你看到的是数组算术。
np.exp
是一个numpy
ufunc
它按元素操作,因此它将返回一个与其参数形状相同的数组。
np.sum
是一个缩减函数,当以数组作为其唯一参数调用时,它将返回一个标量。
运算符结束加载二进制
ufunc
;与
np.exp
类似,它按元素运行。此外,它还进行广播:在这种情况下,标量分母将与数组分子的每个元素配对,从而生成一个数组

最后:是如何实现softmax。

三句话

示例中使用的
lambda
实际上是一种糟糕的风格,参见以下段落:

始终使用def语句而不是 将lambda表达式直接绑定到标识符

是的:

def f(x):返回2*x

否:

f=λx:2*x

第一种形式表示结果函数对象的名称为 特别是“f”而不是泛型“”。这更 通常用于回溯和字符串表示。使用 转让声明中的条款消除了lambda的唯一利益 表达式可以在显式def语句上提供(即它可以 嵌入到更大的表达式中)

内容。你看到的是数组算术。
np.exp
是一个numpy
ufunc
它按元素操作,因此它将返回一个与其参数形状相同的数组。
np.sum
是一个缩减函数,当以数组作为其唯一参数调用时,它将返回一个标量。
运算符结束加载二进制
ufunc
;与
np.exp
类似,它按元素运行。此外,它还进行广播:在这种情况下,标量分母将与数组分子的每个元素配对,从而生成一个数组


最后:是如何实现softmax。

当我使用
def
定义函数时:
def fsoftmax(x):np.exp(x)/np.sum(np.exp(x))
然后
print(fsoftmax(z))
我得到
None
而不是向量。为什么呢?@RussAbbott,你必须使用
return
语句:
def fsoftmax(x):return np.exp(x)/np.sum(np.exp(x))
因为标准函数必须使用return语句返回结果
return np.exp(x)/np.sum(np.exp(x))
。lambda不需要return语句。请参阅OK.Makes sen