我正在尝试用python编写一个逆lognormal函数:
import numpy as np
import scipy.stats as sp
from scipy.optimize import curve_fit
def lognorm1(x,s,scale):
ANS = sp.lognorm(s,scale=scale).ppf(x)
return ANS
curve_fit(lognorm1,x,y)
我可以毫不费力地拟合曲线,但是比例参数是LOGNORM.INV函数在excel上的指数。我知道我可以在最后记录scale参数,但是有没有重写函数的方法,这样我就
我试图用Python进行一些小的数值实验,但我遇到了一些意想不到的行为。我编写了一个程序来在标准Python中找到最小的(正)浮点。下面是:
x = 1.0
while True :
y = x
x /= 2.0
if x == 0:
break
print(y)
如果我没有弄错,vanilla Python使用双精度浮点数,最小(正)数应该是2^(-1022) (或2^(-1023)或2^(-1024),不太确定)。
然而,我的程序返回了一些非常不同的东西。它返回5e-324。
现在,如果我们想把2^(-1022)转化为5*10^(x),我们必须解
因此,我试图用以下幂律来拟合一组数据:
def f(x,N,a): # Power law fit
if a >0:
return N*x**(-a)
else:
return 10.**300
par,cov = scipy.optimize.curve_fit(f,data,time,array([10**(-7),1.2]))
其中的其他条件只是强迫a为正。使用scipy.optimize.curve_fit生成,分别返回N和a的1.2e+04和1.9e0-7的值,绝对不与数据相交。从我手动输入的fits开始,N和a的值应该分别在1
我有255个月(~21年)的金融资产回报率,从-22.25%到+18.09%不等。我使用Fitting empirical distribution to theoretical ones with Scipy (Python)?中的代码将数据拟合到分布中,并生成随机数。 ? 这是数据的直方图。我相信上面的代码试图使用MLE (最大似然估计)将数据拟合到分布中,列表中大约有88种不同的分布。我的问题是,例如,burr分布只是正随机变量(https://en.wikipedia.org/wiki/Burr_distribution,https://docs.scipy.org/doc/
This previous SO question考虑将均匀分布转换为正态分布。 对于蒙特卡罗模拟,我不仅需要正态(高斯),而且需要一些计算高效的方法来从"fat-tailed"或heavy-tailed分布生成大量样本,使用给定的(64位或双精度)均匀RNG作为输入。这些分布的例子包括:对数正态分布、帕累托分布、学生分布和柯西分布。 使用逆CDF是可以接受的,给出了根据需要计算逆CDF的计算效率的方法。 该标记用于独立于语言的算法,但所需的实现是用于基本的过程化编程语言(C、Basic、过程化Swift、Python、et.al。)
我正试图为我的数据获得最好的发行版。拟合完成如下图所示,但我需要一个测量,以选择最好的模式。我将拟合优度与a-平方值进行了比较,并用Kolmogorov-Smirnov (KS)检验了观测值与拟合分布的显着性差异。我搜索了一些潜在的解决方案-- 、、,但没有得到以下结果:
如果p-value大于k-statistic,是否意味着我们可以接受假设或数据很好地符合分布?
Alternatively,是否可以将level of significance(a=0.005)与p-value进行比较并决定是否接受或拒绝假设?如果p-value低于a,那么这两种分布很可能是不同的。
For Kolmogor
我感兴趣的是用一种非常规的方式乘以数字。假设你是这样倍增的:
out = a * b * c * d
如果所有的输入都是正的,所有的输入都是负的,或者两个输入是正的,两个是负的(让我们忽略0),out将是正的。
而不是传统的数学,我希望只有当所有的输入都是正的或者所有的输入都是负的时候,输出的符号才是正的。否则,输出为负数。
对于标量来说,实现这一点很简单,但是我想用numpy实现逐元素向量乘法。有没有一种简单的方法可以在numpy中实现这一点?