我们如何绘制(在python matplotlib中)双变量高斯分布,给定它们的中心和协方差矩阵作为numpy数组?
假设我们的参数如下:
center1=np.array([3,3])
center2=np.array([5,5])
cov1=np.array([ [1.,.5], [.5,.1]])
cov2=np.array([ [.2,.5], [.5,.2]])
Run Code Online (Sandbox Code Playgroud) 首先,这是pdf高斯函数的正确C++表示吗?
float pdf_gaussian = ( 1 / ( s * sqrt(2*M_PI) ) ) * exp( -0.5 * pow( (x-m)/s, 2.0 ) );
Run Code Online (Sandbox Code Playgroud)
第二,我们做这样的事情是否有意义?
if(pdf_gaussian < uniform_random())
do something
else
do other thing
Run Code Online (Sandbox Code Playgroud)
编辑:你想要实现的目标的一个例子:
假设我有一个名为Y1的数据.然后一个名为Xi的新数据到达.我想知道是否应该将Xi与Y1相关联,或者我是否应该将Xi保留为将被称为Y2的新数据数据.这基于新数据Xi与现有数据Y1之间的距离.如果Xi与Y1"相距",那么Xi将不与Y1相关联,否则如果它"不远",则它将与Y1相关联.现在我想使用基于Y和过去已经与Y关联的数据之间的距离的平均值和偏差的高斯概率来模拟这个"远"或"不远".
我试图绘制3个正态分布的例子,但ggplot似乎将路径识别为一个连续的路径,而不是按因子水平分层的路径.我对ggplot比较新,任何帮助都会非常感激.
这是我的代码:
set.seed(5872)
x<-seq(-7.5,7.5,0.1)
l<-length(x)*3
df<-data.frame(P=factor(rep(c("Mean: -1, SD: 0.5","Mean: 0, SD: 1","Mean: 1, SD: 1.5"), each=l) ),
X=(c(x,x,x)),
Y=(c(dnorm(x,-1,0.5),dnorm(x,0,1),dnorm(x,1,1.5))))
Normal<-ggplot(data=df,aes(X,Y,group=P,color=P))+
geom_path()+
scale_x_continuous("")+
scale_y_continuous("f(x)")+
scale_color_discrete("Parameters")+
ggtitle("Normal") +
theme(plot.title = element_text(size=25,lineheight=.8, face="bold"))
Run Code Online (Sandbox Code Playgroud)
如何让ggplot识别这些因素并用3种不同颜色绘制?而不是显示一条连续路径?
给定高斯(正态)随机变量的均值和方差,我想计算其概率密度函数(PDF).
我在这篇文章中提到:在Python中给出mean,std给出正态分布的概率,
另外scipy docs:scipy.stats.norm
但是当我绘制曲线的PDF时,概率超过1!请参阅此最低工作示例:
import numpy as np
import scipy.stats as stats
x = np.linspace(0.3, 1.75, 1000)
plt.plot(x, stats.norm.pdf(x, 1.075, 0.2))
plt.show()
Run Code Online (Sandbox Code Playgroud)
这就是我得到的:
怎么可能有200%的概率得到平均值,1.075?我在这里误解了什么吗?有没有办法纠正这个?
我想生成n个随机数,例如,n=200其中可能值的范围在2到40之间,平均值为12,中值为6.5.
我到处搜索,我找不到解决方案.我尝试了下面的脚本,它适用于20等小数字,对于大数字,它需要很长时间并返回结果.
n=200
x = np.random.randint(0,1,size=n) # initalisation only
while True:
if x.mean() == 12 and np.median(x) == 6.5:
break
else:
x=np.random.randint(2,40,size=n)
Run Code Online (Sandbox Code Playgroud)
任何人都可以通过改进这个来帮助我获得快速结果,即使n = 5000左右?
在PHP,我可以得到一组符合指定平均值和标准差的随机数吗?
我试图播种一些数据,无论如何在SQL Server中生成遵循正态分布曲线的数字?
比如:我会指定平均值,标准偏差和计数,然后我会得到一个数字列表?
我一直在使用MASS包,可以使用image和par(new = TRUE)绘制两个双变量法线,例如:
# lets first simulate a bivariate normal sample
library(MASS)
bivn <- mvrnorm(1000, mu = c(0, 0), Sigma = matrix(c(1, .5, .5, 1), 2))
bivn2 <- mvrnorm(1000, mu = c(0, 0), Sigma = matrix(c(1.5, 1.5, 1.5, 1.5), 2))
# now we do a kernel density estimate
bivn.kde <- kde2d(bivn[,1], bivn[,2], n = 50)
bivn.kde2 <- kde2d(bivn2[,1], bivn[,2], n = 50)
# fancy perspective
persp(bivn.kde, phi = 45, theta = 30, shade = .1, border = NA)
par(new=TRUE)
persp(bivn.kde2, …Run Code Online (Sandbox Code Playgroud) 虽然我认为这是一个基本问题,但我似乎无法找到如何在R中计算:
交叉点(我需要x值)的2个或更多正态分布(拟合在直方图上),例如具有以下参数:
d=data.frame(mod=c(1,2),mean=c(14,16),sd=c(0.9,0.6),prop=c(0.6,0.4))
Run Code Online (Sandbox Code Playgroud)
使用我的2条曲线的均值和标准差,并支持每个mod对分布的贡献比例.
在R中,如果样本大小超过5000,则Shapiro.test()函数无法运行.
shapiro.test(rnorm(10^4))
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我可以超越这个限制吗?
谢谢你的帮助
r ×4
distribution ×3
python ×3
numpy ×2
random ×2
statistics ×2
bigdata ×1
c++ ×1
gaussian ×1
ggplot2 ×1
matplotlib ×1
php ×1
plot ×1
probability ×1
scipy ×1
sql-server ×1