Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.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中的KDE具有不同的mu、sigma/mapping函数到数组_Python_Arrays_Kernel Density - Fatal编程技术网

python中的KDE具有不同的mu、sigma/mapping函数到数组

python中的KDE具有不同的mu、sigma/mapping函数到数组,python,arrays,kernel-density,Python,Arrays,Kernel Density,我有一个二维的值数组,我想对其执行高斯KDE,有一个陷阱:假设点具有不同的方差。对于这一点,我有第二个二维数组(具有相同的形状),它是用于每个点的高斯方差。在这个简单的例子中 import numpy as np data = np.array([[0.4,0.2],[0.1,0.5]]) sigma = np.array([[0.05,0.1],[0.02,0.3]]) 将有四个高斯,其中第一个以x=0.4为中心,σ=0.05。注:实际数据远大于2x2 我在寻找两件事中的一件: 高斯KDE解

我有一个二维的值数组,我想对其执行高斯KDE,有一个陷阱:假设点具有不同的方差。对于这一点,我有第二个二维数组(具有相同的形状),它是用于每个点的高斯方差。在这个简单的例子中

import numpy as np
data = np.array([[0.4,0.2],[0.1,0.5]])
sigma = np.array([[0.05,0.1],[0.02,0.3]])
将有四个高斯,其中第一个以x=0.4为中心,σ=0.05。注:实际数据远大于2x2

我在寻找两件事中的一件:

  • 高斯KDE解算器,允许每个点的带宽变化
  • 将每个高斯分布的结果映射到三维数组中的一种方法,在一系列点上对每个高斯分布进行评估(例如,沿着np.linspace(0,1101)评估每个中心/σ对)。在这种情况下,我可以通过去掉数组[:,:,51],将KDE值设为x=0.5

  • 我发现处理这个问题的最好方法是通过sigma数组和数据数组的数组乘法。然后,我为每个我想求解KDE的值堆叠数组

    import numpy as np
    
    def solve_gaussian(val,data_array,sigma_array):
        return (1. / sigma_array) * np.exp(- (val - data_array) * (val - data_array) / (2 * sigma_array * sigma_array))
    
    def solve_kde(xlist,data_array,sigma_array):
        kde_array = np.array([])
        for xx in xlist:
            single_kde = solve_gaussian(xx,data_array,sigma_array)
            if np.ndim(kde_array) == 3:
                kde_array = np.concatenate((kde_array,single_kde[np.newaxis,:,:]),axis=0)
            else:
                kde_array = np.dstack(single_kde)
        return kde_array
    
    xlist = np.linspace(0,1,101) #Adjust as needed
    kde_array = solve_kde(xlist,data_array,sigma_array)
    kde_vector = np.sum(np.sum(kde_array,axis=2),axis=1)
    mode_guess = xlist[np.argmax(kde_vector)]
    

    警告,对于任何试图使用此代码的人:高斯值沿轴0,而不是原始问题中指定的轴2。

    您不能逐行或其他方式切片数组吗?例如,对范围(data.shape)中的循环中的数据[i,:]”执行一维KDE?还有,你看过这个吗?行对行不起作用,因为每个单元格都有自己的方差。一个单元接一个单元可以工作,我只是不知道一个好的实现方法——我当前的实现花费的时间太长了一个数量级。至于scipy包,我目前正在尝试重写它以满足我的需要。如果没有更好的答案出现,我可能最终会这样做。
    中的
    sigma\u数组
    不应该通过除以指数而不是乘以指数来求解吗?即:
    return(1./sigma\u数组)*np.exp(-(val-data\u数组)*…