举个例子:
boltzmann <- function(x, t=0.1) { exp(x/t) / sum(exp(x/t)) }
z=rnorm(10,mean=1,sd=0.5)
exp(z[1]/t)/sum(exp(z/t))
[1] 0.0006599707
boltzmann(z)[1]
[1] 0.0006599707
似乎exp
在boltzmann
函数中对元素和向量进行操作,并且知道何时做正确的事情。是否sum
“展开”输入向量并将表达式应用于值?有人可以解释这在 R 中是如何工作的吗?
编辑:感谢您对 R n00b 的所有评论、澄清和耐心。总之,这个工作的原因对于来自其他语言的我来说并不是很明显。以python为例。您将首先计算总和,然后计算向量中每个元素的值。
denom = sum([exp(v / t) for v in x])
vals = [exp(v / t) / denom for v in x]
而 Rsum(exp(x/t))
可以内联计算。