Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 生成三维高斯数据_Python_Numpy_Scipy_Scikit Learn_Gaussian - Fatal编程技术网

Python 生成三维高斯数据

Python 生成三维高斯数据,python,numpy,scipy,scikit-learn,gaussian,Python,Numpy,Scipy,Scikit Learn,Gaussian,我试图生成一个三维分布,其中x,y表示曲面,而z是某个值的大小,分布在一个范围内 我在看,但它只能让我得到一些样品。我希望能够指定一些x,y坐标,并返回z值应该是什么;所以我可以查询gp(x,y),并返回一个z值,该值遵循某种均值和协方差 也许是一个更具说明性的(玩具)例子:假设我有一些温度分布,可以建模为高斯过程。所以我可能在(0,0)时的平均温度为20,还有一些协方差[[1,0],[0,1]。我希望能够创建一个模型,然后我可以在不同的x,y位置查询,以获得该位置的温度(因此,在(5,5)处,

我试图生成一个三维分布,其中
x,y
表示曲面,而
z
是某个值的大小,分布在一个范围内

我在看,但它只能让我得到一些样品。我希望能够指定一些
x,y
坐标,并返回
z
值应该是什么;所以我可以查询
gp(x,y)
,并返回一个
z
值,该值遵循某种均值和协方差

也许是一个更具说明性的(玩具)例子:假设我有一些温度分布,可以建模为高斯过程。所以我可能在
(0,0)
时的平均温度为20,还有一些协方差
[[1,0],[0,1]
。我希望能够创建一个模型,然后我可以在不同的
x,y
位置查询,以获得该位置的温度(因此,在
(5,5)
处,我可能会得到大约7度)


如何最好地实现这一点?

我假设您的数据可以复制到单个np.array,在我的代码中我将其称为
X
,shape
X.shape=(n,2)
,其中
n
是您拥有的数据点的数量,如果您希望一次测试一个点,您可以拥有
n=1
<当然,code>2是指由坐标(
x
y
)基所跨越的二维空间。然后:

def estimate_gaussian(X):
  return X.mean(axis=0), np.cov(X.T)

def mva_gaussian( X, mu, sigma2 ):
  k = len(mu)
  # check if sigma2 is a vector and, if yes, use as the diagonal of the covariance matrix
  if sigma2.ndim == 1 :
    sigma2 = np.diag(sigma2)
  X = X - mu
  return (2 * np.pi)**(-k/2) * np.linalg.det(sigma2)**(-0.5) * \
    np.exp( -0.5 * np.sum( np.multiply( X.dot( np.linalg.inv(sigma2) ), X ), axis=1 ) ).reshape( ( X.shape[0], 1 ) )
将做你想做的-也就是说,给定数据点,你将得到这些点(或单个点)的高斯函数值。这实际上是你需要的一个广义版本,因为这个函数可以描述多元高斯分布。您似乎对
k=2
情况和对角协方差矩阵
sigma2
感兴趣


此外,这也是一个概率分布——你说你不想要。我们没有足够的信息来知道你想要拟合的是什么(即,你期望高斯函数的三个参数是什么。通常,人们对正态分布感兴趣)。尽管如此,您可以根据需要简单地更改
mva_gaussian
函数返回语句中的参数,如果您不希望标准化分布,则可以忽略
估计gaussian
函数(尽管一个标准化函数仍然会给你你想要的——一个实值温度——只要你知道标准化过程——你知道:-)

您可以使用
scipy.stats.multivariable\u normal
创建多变量正态分布

>>> import scipy.stats
>>> dist = scipy.stats.multivariate_normal(mean=[2,3], cov=[[1,0],
                                                            [0,1]])
然后要查找
p(x,y)
可以使用
pdf

>>> dist.pdf([2,3])
0.15915494309189535
>>> dist.pdf([1,1])
0.013064233284684921

这表示概率(你称之为
z
)给定任何
[x,y]

,所以你想要概率密度函数而不是样本?所以,这可能是我缺乏理解:PDF似乎与我正在寻找的相似,但不是x,y的0-1概率,我想要一些高斯曲线样的函数/曲面,我可以采样以获得实际的数据点。我编辑了我的答案,以更好地满足您的需要。虽然不可能知道你想要适应什么-这就是为什么我写了一个标准化分布函数。但是,现在您可以更改函数中的参数以适应您的温度分布。