首页 > 编程问答 >球体上的采样角度:从一般协方差矩阵到浓度参数

球体上的采样角度:从一般协方差矩阵到浓度参数

时间:2024-09-25 02:25:54浏览次数:1  
标签:python statistics gaussian

我正在尝试在 python 中提取球体上的点。

我必须定位天空中的事件并使用healpy 生成地图。 在测试期间,我使用了 von Mises-Fisher,因为我假设 $'\theta'$ 的方差与 $'\phi'$ 的方差相同。一切顺利,我能够通过使用 $'k=1/\sigma^2'$ 获得浓度参数 $'k'$。

我评估像素概率的函数是

def Mises_Fisher(theta,phi,DS_theta,DS_phi,conc):
    meanvec=hp.ang2vec(DS_theta,DS_phi)
    meanvec=np.asarray(meanvec,dtype=np.float128)
    norm=np.sqrt(np.dot(meanvec,meanvec))
    meanvec=meanvec/norm
    
    var=hp.ang2vec(theta,phi)
    var=np.asarray(var,dtype=np.float128)
    norm=np.sqrt(np.dot(var,var))
    var=var/norm
    
    factor=np.dot(conc*var,meanvec)
    factor=np.float128(factor)
    #Normalization is futile, we will devide by the sum
    #fullnorm=conc/(2*np.pi*(np.exp(conc)-np.exp(-conc)))
    ret=np.float128(np.exp(factor))#/fullnorm
    #ret=factor
    return ret

,然后对于healpy图中的每个像素,我可以分配一个概率。

现在我有一个不再是各向同性的协方差矩阵,在这种情况下如何在球体上生成点?我知道 肯特分布 的存在,但我没有所需的数量,例如$'\gamma'$、$'\beta'$和$'k'$。我不知道是否有办法获得那些给定的协方差矩阵。

使问题进一步复杂化,矩阵是 11 维,但我只需要到 (距离,theta,phi) 空间的投影然后生成地图。

现在我尝试从多元高斯中提取,但由于高斯位于切平面上,对于某些方差,分布会产生 $'\theta'$ 和 $ 域之外的角度'\phi'$.

这是我用来提取点的代码

num_samples = 10**7
samples = np.random.multivariate_normal(perm_mean, perm_cov, num_samples)

phi = samples[:, 2]
theta = samples[:, 1]
print(np.min(theta),np.max(theta))
print(np.min(phi),np.max(phi))
print('starting mean values')
print('theta={}, phi={}'.format(perm_mean[1],perm_mean[2]))

要点是,对于某些矩阵,方差使得角度可以超出域之外。我无法对矩阵进行操作,这些矩阵是由其他一些代码提供给我的,应该被视为固定数据。

提前谢谢大家!


以下是针对问题的一些想法,结合了 Kent 分布、从高斯分布采样以及处理协方差矩阵的方法:

1. 使用 Kent 分布

说得对,在球面上处理非各向同性协方差时,Kent 分布是一个更自然的选择。诀窍在于如何从的 11 维协方差矩阵中获得参数 γ、β 和 k。由于只对 (距离、θ、φ) 子空间感兴趣,因此我们可以集中精力于此:

  • 投影协方差矩阵: 首先,需要将 11 维协方差矩阵投影到感兴趣的 3 维子空间 (距离、θ、φ)。这可以通过选择与这些维度相对应的子矩阵来实现。
  • 将协方差转换为 Kent 参数: 没有从一般协方差矩阵到 Kent 分布参数的直接解析映射。然而,可以通过数值优化技术来估计这些参数。这个想法是最小化从候选 Kent 分布和目标 3D 协方差矩阵计算出的理论协方差矩阵之间的差异(例如,使用 Frobenius 范数)。

  • 可以在 scipy.optimize (例如 scipy.optimize.minimize )中使用优化例程。

  • 目标函数将计算给定 γ、β 和 k 的 Kent 分布的协方差矩阵,并返回其与投影协方差矩阵之间的差异。
  • 需要为 γ、β 和 k 选择适当的初始猜测值和边界条件(例如,γ 应该是一个单位向量,β 应该在 0 和 1 之间,k 控制集中度)。

  • 从 Kent 分布中采样: 一旦获得了 Kent 参数,就可以使用拒绝采样或 Metropolis-Hastings 等方法从分布中采样。

2. 从高斯分布采样并重新参数化

的方法(从多元高斯分布中采样)是有效的,但需要额外步骤以确保样本位于球体上:

  • 从高斯分布中采样: 按照目前的方法进行,从 11 维高斯分布中采样。
  • 投影到 3D: 提取与 (距离、θ、φ) 子空间相对应的 3 维样本。
  • 转换为笛卡尔坐标: 使用标准球坐标公式将 (距离、θ、φ) 转换为笛卡尔坐标 (x, y, z)。
  • 归一化到单位球面: 通过将每个点除以其范数,将样本投影到单位球面上。

python xyz = np.array([distance * np.sin(theta) * np.cos(phi), distance * np.sin(theta) * np.sin(phi), distance * np.cos(theta)]) xyz /= np.linalg.norm(xyz, axis=0)

  • 转换回球坐标: 如果需要,将归一化的笛卡尔坐标转换回 (距离、θ、φ)。

其他注意事项:

  • 数值稳定性: 在处理球坐标时,请注意潜在的数值问题(例如,在 θ = 0 或 θ = π 附近)。根据所需的精度,可能需要使用数值上更稳定的实现方式。
  • 计算效率: 根据生成样本数量的需求,优化代码以获得更好的性能可能很有用。这可能涉及使用矢量化操作、高效的采样算法或并行计算技术。

请记住,从 Kent 分布中采样需要更多的计算工作,但可以更准确地表示数据的潜在分布,尤其是在协方差具有显着非各向同性的情况下。另一方面,从高斯分布中采样并重新参数化可能更容易实现,并且在的特定应用中提供合理的近似值,具体取决于所需精度和性能的权衡。

标签:python,statistics,gaussian
From: 79017371

相关文章

  • 我找不到一种方法让我的 python print 语句在几秒钟后自行删除
    我正在尝试制作一款基于文本的冒险游戏,我希望能够让文本自行删除。举个例子,游戏将使用print()语句打印文本,5秒后文本将被删除或对玩家隐藏。我试图找到其他人与此问题相关的问题,并且我找不到任何信息。我不知道该使用什么命令或与之相关的任何内容,请帮忙。Ivetriedtof......
  • 在 python 中可视化四元数
    我在无人机上安装了一个IMU,每0.1秒收集一次四元数数据(w,x,y,z)。现在我想将四元数数据与实际的无人机方向(视频数据)进行比较。所以我想创建某种盒子对象来显示基于四元数数据的方向。我实现了以下教程,将四元数转换为欧拉以进行可视化:https://www.youtube.com/watch?......
  • 有没有办法在 python 中获取特定的键盘输入
    我正在为学校开发一个项目,它目前有行输入(“按Enter继续”),它可以工作,但只要用户按Enter键程序继续,输入是什么并不重要,而且我我希望它仅在按下特定键时才起作用。我查了一下,曾经有一个键盘模块,但由于某种莫名其妙的原因它被删除了,那么还有其他方式获取输入吗?你绝对可以......
  • python+flask计算机毕业设计基于微信小程序的法律问题咨询系统设计与实现(程序+开题+论
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着互联网的飞速发展和智能手机的普及,人们获取信息和解决问题的途径日益多样化。在法律服务领域,传统的线下咨询方式已难以满足公众日益增......
  • python+flask计算机毕业设计基于人脸识别的医疗保险系统的设计与实现(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着科技的飞速发展和人口老龄化的加剧,医疗保险系统面临着前所未有的挑战与机遇。传统医疗保险管理方式依赖于人工审核与纸质记录,不仅效率......
  • python+flask计算机毕业设计基于微信小程序的河南省美食分享平台(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在移动互联网时代,智能手机和社交媒体已成为人们日常生活不可或缺的一部分。微信小程序作为腾讯推出的一种轻量级应用形态,凭借其无需安装、......
  • python+flask计算机毕业设计基于微信小程序的网络文学管理平台(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着互联网的迅猛发展,网络文学已成为当代文化生活中不可或缺的一部分,它不仅丰富了人们的阅读体验,还促进了文学创作的多元化与普及化。然而......
  • Python不同方式正倒序遍历的时间开销
    fromtimeitimporttimeitli=[iforiinrange(1000000)]deffor_loop(n):#使用for直接遍历ret=0foriinli:ret=li[i]deffor_loop_enumerate(n):#使用enumerate进行遍历ret=0foridx,iinenumerate(li):re......
  • 【入门岛·第2关】python基础
    目录Python实现wordcountVscode连接InternStudiodebug笔记Python实现wordcountimportstringdefwordcount(text):#去掉标点符号,并将文本转换为小写text=text.translate(str.maketrans('','',string.punctuation)).lower()#按空格分割文本为单词......
  • Anaconda的使用命令,方便python的管理
    pythonpython是世界上最好的编程语言(有杠精,你就对。)python的领域涉及了AI,大数据,网络爬虫,运维,开发等等方面。python的环境由解释器和包组成。1、python的解释器Python解释器是Python环境的本体,也就是python.exe文件。我们需要在环境变量的路径中将python.exe所在的目录添加上,这......