Python赢得了';t显示np.exp市场份额值

Python赢得了';t显示np.exp市场份额值,python,numpy,exp,Python,Numpy,Exp,我试图用以下公式估算市场份额: c = np.exp(-Mu*a)/(np.exp(-Mu*a)+np.exp(-Mu*b)) 其中a和b是9x9矩阵,单元值可以大于1000。因为数字太小,Python返回NaN值。为了提高估计的精度,我已经尝试了np.float128,但这只会引起一个错误,即numpy没有名为float128的属性。我也尝试了longdouble,但同样没有成功。是否有其他方法使Python显示单元格的实际值而不是NaN?您有: c = np.exp(-Mu*a)/(np.

我试图用以下公式估算市场份额:

c = np.exp(-Mu*a)/(np.exp(-Mu*a)+np.exp(-Mu*b))
其中a和b是9x9矩阵,单元值可以大于1000。因为数字太小,Python返回NaN值。为了提高估计的精度,我已经尝试了
np.float128
,但这只会引起一个错误,即numpy没有名为float128的属性。我也尝试了
longdouble
,但同样没有成功。是否有其他方法使Python显示单元格的实际值而不是NaN?

您有:

c = np.exp(-Mu*a)/(np.exp(-Mu*a)+np.exp(-Mu*b))
将分子和分母乘以
e^(Mu*a)
,得到:

c = 1/(1+np.exp(Mu*(a-b)))
这只是对同一公式的重新表述

现在,如果
exp
项仍然太小,并且您不需要更精确的结果,那么
c
大约非常接近1。如果您仍然需要控制精度,您可以在两侧取
log
,并使用
log(1+x)
的泰勒展开式,您有:

c = np.exp(-Mu*a)/(np.exp(-Mu*a)+np.exp(-Mu*b))
将分子和分母乘以
e^(Mu*a)
,得到:

c = 1/(1+np.exp(Mu*(a-b)))
这只是对同一公式的重新表述


现在,如果
exp
项仍然太小,并且您不需要更精确的结果,那么
c
大约非常接近1。如果你仍然需要控制精度,你可以在两边取
log
,然后使用
log(1+x)

表达式中的
Mu
是什么?
Mu
是一个在更大的函数中被估计的参数。使用
c=1/(1+np.exp(Mu*(a-b))
有效吗(基于您拥有的值)?我正在使用您建议的代码运行代码,它看起来很有效!这是相同公式的替代符号吗?是的,请参阅我的答案。表达式中的
Mu
是什么?
Mu
是在较大的函数中估计的参数。是否使用
c=1/(1+np.exp)(Mu*(a-b))
work(基于您拥有的值)?我正在使用您建议的代码运行代码,它看起来很有效!这是相同公式的替代符号吗?是的,请参阅我的答案。