笔记:Healpy 教程

Healpy是一个Python包,用于处理HEALPix像素化的球面数据,常用于天体物理学。教程介绍了NSIDE参数、像素转换、坐标变换、地图读写、可视化及球面谐波操作。示例展示了地图分辨率、像素查找、Mollweide投影、经纬度检索等功能。
摘要由CSDN通过智能技术生成

Healpy 教程

Persus & Xie

简介

healpy是一个Python包,用于处理球体上的像素化数据。它基于分层等面积孤立像素化(HEALPix)方案,并捆绑了HEALPix c++库。

HEALPix的开发是为了有效地处理来自BOOMERANG和WMAP等宇宙学实验的宇宙微波背景数据,但它现在被用于天体物理学的其他分支,以存储来自全天观测的数据。目标受众过去主要是宇宙学科学界,但目前任何对处理球面像素化数据感兴趣的人都非常欢迎提出新的特性。

Healpy提供实用程序:

  • 在HEALPix嵌套和环形方案中天空坐标和像素索引之间的转换
  • 在天空中寻找磁盘、多边形或条带中的像素
  • 在银河参考系、黄道参考系和赤道参考系之间应用坐标变换
  • 应用自定义旋转的矢量或完整的地图
  • 读取和写入HEALPix映射到磁盘的FITS格式
  • 升级和降低现有HEALPix映射的分辨率
  • MollweideGnomonicCartographic投影中可视化地图
  • 使用多线程C++例程将映射转换为球面调和空间
  • 从地图中计算自动和交叉功率谱,并从光谱创建地图实现
所需其他模块

在数据处理以及可视化时需要用到两个模块:matplotlibnumpy

import matplotlib.pyplot as plt
import numpy as np
import healpy as hp

NSIDE和排序

地图就是简单的numpy数组,其中每个数组元素都指向由Healpix像素化方案(参见Healpix网站)定义的天空中的一个位置。

映射的分辨率由NSIDE参数定义,该参数通常是2的幂,比如: 2 2 = 4 , 2 3 = 8 , 2 4 = 16 , 2 5 = 32 , ⋅ ⋅ ⋅ 2^2=4,2^3=8,2^4=16,2^5=32,\cdot\cdot \cdot 22=4,23=8,24=16,25=32,

程序实例1
import healpy as hp

NSIDE = 32
print(
    "Approximate resolution at NSIDE {} is {:.2} deg".format(
        NSIDE, hp.nside2resol(NSIDE, arcmin=True) / 60
    )
)

输出

Approximate resolution at NSIDE 32 is 1.8 deg

程序实例2

函数healpy.pixelfunc.nside2npix可以给出map中的像素数目NPIX

import healpy as hp

NSIDE = 32
NPIX = hp.nside2npix(NSIDE)
print(NPIX)

输出

12288

程序实例3

import matplotlib.pyplot as plt
import numpy as np
import healpy as hp

NSIDE = 1
NPIX = hp.nside2npix(NSIDE)
m = np.arange(NPIX)
hp.mollview(m, title="Mollview image RING")
hp.graticule()
plt.show()

输出为

0.0 180.0 -180.0 180.0

在这里插入图片描述

为了方便了解数据的排序方式,对图中的颜色块进行标识序号
请添加图片描述

其坐标系中的纬度为余纬 θ \theta θ。余纬指“纬度的余”,即:余纬+纬度= 9 0 ∘ 90^\circ 90。北极纬度为0, π / 2 \pi/2 π/2为赤道, π \pi π为南极。经度 ϕ \phi ϕ由东向西从0递增到 2 π 2\pi 2π。在Mollview投影中, ϕ \phi ϕ在地图的中心,向左为东。

程序实例4

也可以用矢量表示坐标,例如vec是一个归一化矢量,其指向: θ = π / 2 , ϕ = 3 / 4 π \theta=\pi/2, \phi=3/4\pi θ=π/2,ϕ=3/4π

import healpy as hp
vec = hp.ang2vec(np.pi / 2, np.pi * 3 / 4)
print(vec)

输出为:

[-7.07106781e-01 7.07106781e-01 6.12323400e-17]

程序实例5

在里面找到某个点10度以内所有像素的索引,然后在map上更改这些索引的值:

import numpy as np
import healpy as hp
import matplotlib.pyplot as plt

NSIDE = 16
NPIX = hp.nside2npix(NSIDE)
vec = hp.ang2vec(np.pi / 2, np.pi * 3 / 4)
ipix_disc = hp.query_disc(nside=NSIDE, vec=vec, radius=np.radians(10))
m = np.arange(NPIX)
m[ipix_disc] = m.max()
hp.mollview(m, title="Mollview image RING")
plt.show()

结果图例

请添加图片描述

程序实例6

我们可以使用pix2ang检索每个像素的纬度和经度,在这种情况下,可以注意到前4个像素中心覆盖了北极~1.46度,这四个点都在同一纬度。第五个像素已经是另一个像素环的一部分

import numpy as np
import healpy as hp
import matplotlib.pyplot as plt

NSIDE = 16
NPIX = hp.nside2npix(NSIDE)
vec = hp.ang2vec(np.pi / 2, np.pi * 3 / 4)
ipix_disc = hp.query_disc(nside=NSIDE, vec=vec, radius=np.radians(10))
m = np.arange(NPIX)
m[ipix_disc] = m.max()
theta, phi = np.degrees(hp.pix2ang(nside=32, ipix=[0, 1, 2, 3, 4]))
print("the latitude:",theta)
print("the longitude:",phi)

输出为

the latitude: [1.46197116 1.46197116 1.46197116 1.46197116 2.92418036]

the longitude: [ 45. 135. 225. 315. 22.5]

程序实例7

RING排序对于球面谐波变换是必要的,另一个选项是嵌套排序,它对于映射域操作非常有效,因为向上和向下缩放映射只需要乘以和舍入像素索引。看看下面的像素是如何在嵌套方案中排序的,它是在12个HEALPix基本像素的结构(NSIDE 1)中再分割生成的:

NSIDE = 2
NPIX = hp.nside2npix(NSIDE)
m = np.arange(NPIX)
hp.mollview(m, nest=True, title="Mollview image NESTED")
hp.graticule()
plt.savefig("test3.png",bbox_inches='tight',dpi=300,format="png")
plt.show()

结果显示
请添加图片描述

为了方便了解数据的排序方式,对部分图中的颜色块进行标识序号

请添加图片描述

所有healpy例程都假定RING顺序,事实上,只要你用read_map读取一个map,即使它被存储为NESTED,它也会被转换为RING。但是,对于大多数healpy routines可以按照嵌套顺序将nest=True`参数传递。

未完待续······

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
### 回答1: Spark SQL是Apache Spark中的一个模块,它提供了一种基于结构化数据的编程接口。Spark SQL可以让用户使用SQL语句来查询数据,也可以让用户使用DataFrame API来进行数据处理和分析。Spark SQL支持多种数据源,包括Hive、JSON、Parquet等。Spark SQL还提供了一些高级功能,如支持用户自定义函数、支持分布式机器学习算法等。Spark SQL的目标是让用户能够方便地使用Spark进行数据处理和分析,同时提供高性能和可扩展性。 ### 回答2: Spark SQL是一个基于Spark平台的关系型数据处理引擎,它支持使用SQL语句和数据框架操作数据,可以轻松处理结构化和半结构化的数据。它可以从多个数据源中读取数据,包括Hive、JSON、Parquet、ORC等。通过Spark SQL,用户可以方便地使用SQL查询语言来分析和处理数据,大大降低了开发和组织数据流的难度。 Spark SQL主要有两种执行模式:SQL查询和DataFrame操作。其中SQL查询基于Hive的SQL语法解析器,支持HiveQL中的大多数语言特性(如UDF、窗口函数等)。在执行计划生成时,Spark SQL采用了Spark的计算引擎,支持各种Spark算子的优化,以便最大程度地提高查询性能。 另一种操作模式是使用DataFrame API,它可以灵活地进行数据转换和处理,并提供了类似于SQL的语法。与SQL查询不同,DataFrame API通过静态检查和编译器优化来避免由SQL查询引起的语法错误和潜在性能问题。 除了这两种基本的操作模式外,Spark SQL还提供了一些高级特性,如嵌套查询、表和视图、共享变量等。这些特性扩展了Spark SQL的功能,使得它可以更加灵活地进行数据处理和查询。 Spark SQL是Spark的重要组成部分,它在数据存储和处理方面提供了很多便利。通过最大程度地利用Spark引擎的优势,Spark SQL能够处理海量数据,并将其转换为有用的信息。这使得Spark SQL成为实现数据分析、机器学习和人工智能的重要工具之一。 ### 回答3: Spark SQL是一种基于Spark平台的数据处理引擎,它提供了高度优化的查询引擎和优秀的支持SQL语句的API。它允许用户使用SQL语句查询来处理大规模数据集,同时仍然支持复杂数据类型和计算。Spark SQL支持数据源,包括Parquet,Avro,JSON等一系列结构化的和半结构化的数据源。 Spark SQL在历史上是一个单独的模块,在Spark 2.0之后,它已经成为Spark的核心组件之一,可以直接在Spark核心API中使用,包括作为一个RDD库或DataFrame/DataSet的API。 Spark SQL的优点如下: 1. 它可以向受过传统SQL培训的用户展示更高级别,更强大的API。 2. 它提供数据集和RDD的良好互操作性。Spark SQL可以通过未被优化的RDD/DataSet API访问同一数据。 3. 它支持Spark的执行引擎以加速查询处理。 使用Spark SQL的时候,可以根据需要选择编程语言,如Scala,Java,Python,SQL等。在Spark核心API中,Spark SQL提供了两种API来处理结构化数据: 1. DataFrame API:DataFrame是具有许多操纵数据的功能的分布式数据集,类似于数据库中的表。 2. Dataset API:Dataset是Scala和Java API,它是类型安全的,并且提供与RDD API相同的API,但比RDD具有更好的性能和可读性。 Spark SQL是Spark生态系统中重要的组成部分之一。在处理大规模数据时,使用Spark SQL可以方便地利用Spark的强大功能,提高处理效率。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Persus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值