python - 如何在 Scala 中实现 Python 的 norm.expect
问题描述
我正在尝试在 scala 中实现这个 python 函数。有人可以帮忙吗?
Python代码是:
from scipy.stats import norm
import numpy as np
def expected_spend(mu,sigma,cl):
return norm.expect(lambda x: np.minimum(x,cl),lb=0,ub=np.inf,loc=mu,scale=sigma)
我无法访问 scala 中的许多外部库,我正在尝试使用 Breeze 来实现它,但是欢迎任何开源库推荐。
解决方案
我找到了一个更数学的答案。这
from scipy.stats import norm
import numpy as np
def expected_spend(mu,sigma,cl):
return norm.expect(lambda x:
np.minimum(x,cl),lb=0,ub=np.inf,loc=mu,scale=sigma)
可以重写为正态分布的两个积分。积分的解决方案发布在这里:https ://www.quora.com/How-do-I-evaluate-int_0-infty-frac-min-xz-exp-frac-x-mu-2-2- sigma-2-sqrt-2-pi-sigma-dx?过滤器& nsrc =2& snid3 =2409997057
所以在 Scala 中使用 Breeze 的解决方案是:
import breeze.math._
import breeze.numerics._
import breeze.numerics.constants.Pi
val min_a_b_gaussian = (mu: Float, sigma: Float, CL: Float) => {
val CL2 = CL / ( sqrt(2) * sigma )
val mu2 = mu / ( sqrt(2) * sigma )
val result = (sigma / sqrt(2) )*((1/sqrt(Pi)) * ( exp(-1*mu2*mu2) - exp(-1*(CL2 - mu2)*(CL2 - mu2)) ) - (CL2 - mu2)*erf(CL2 - mu2) + CL2 + mu2*erf(mu2) )
result
}
推荐阅读
- apache-kafka - Kafka Streams EOS 模式 - 通知关闭
- python - 求生成器的长度或是否有元素
- python - 如何将客户端 ipv6 /ipv4 ip 地址与服务器 ipv6 地址一起使用。?
- mysql - 在 SQL 中合并同一日期事务
- elixir - 引发错误时在堆栈跟踪中包含函数参数
- google-ads-api - 如何使用谷歌广告更改谷歌数据工作室链接中的标签名称
- json - 从 SQL Server 表中读取 Json 值
- python - Pylint 在 Visual Studio Code 中给出错误,但代码运行
- google-app-engine - 如何使用代理/隧道虚拟机在用户和 APP Engine 之间进行通信?
- jenv - /Users/username/.jenv/jenv.version:权限被拒绝