这个Python函数是如何读取的?
Wikipedia有下面的示例代码 当我运行它时,它会成功运行。我不明白如何读取这个Python函数是如何读取的?,python,numpy,Python,Numpy,Wikipedia有下面的示例代码 当我运行它时,它会成功运行。我不明白如何读取lambda函数。特别是,参数x如何引用分子中的数组元素并跨越分母中的所有元素 [注:这个问题大概是重复的,一般是关于lambda。这个问题不一定是关于lambda。它是关于如何阅读np约定。由@Paul Panzer和@Mihai Alexandru Ionut给出的答案都回答了我的问题。很遗憾,在回答问题时,我不能同时检查这两个问题n 为了确认我理解他们的答案(并澄清我的问题是关于什么的): x是整个数组(因为
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
是一个numpyufunc
它按元素操作,因此它将返回一个与其参数形状相同的数组。np.sum
是一个缩减函数,当以数组作为其唯一参数调用时,它将返回一个标量。
运算符结束加载二进制ufunc
;与np.exp
类似,它按元素运行。此外,它还进行广播:在这种情况下,标量分母将与数组分子的每个元素配对,从而生成一个数组
最后:是如何实现softmax。三句话
示例中使用的lambda
实际上是一种糟糕的风格,参见以下段落:
始终使用def语句而不是
将lambda表达式直接绑定到标识符
是的:
def f(x):返回2*x
否:
f=λx:2*x
第一种形式表示结果函数对象的名称为
特别是“f”而不是泛型“”。这更
通常用于回溯和字符串表示。使用
转让声明中的条款消除了lambda的唯一利益
表达式可以在显式def语句上提供(即它可以
嵌入到更大的表达式中)
内容。你看到的是数组算术。np.exp
是一个numpyufunc
它按元素操作,因此它将返回一个与其参数形状相同的数组。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