- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Python 和 astropy.io 从 FITS 文件中的二进制表中提取数据。该表包含一个事件数组,其中包含超过 200 万个事件。我想要做的是将某些事件的 TIME 值存储在一个数组中,这样我就可以对该数组进行分析。我遇到的问题是,在 fortran(使用 FITSIO)中,相同的操作在慢得多的处理器上可能需要几秒钟,而在 Python 中使用 astropy.io 的完全相同的操作需要几分钟。我想知道瓶颈到底在哪里,是否有更有效的方法来访问各个元素以确定是否将每个时间值存储在新数组中。这是我到目前为止的代码:
from astropy.io import fits
minenergy=0.3
maxenergy=0.4
xcen=20000
ycen=20000
radius=50
datafile=fits.open('datafile.fits')
events=datafile['EVENTS'].data
datafile.close()
times=[]
for i in range(len(events)):
energy=events['PI'][i]
if energy<maxenergy*1000:
if energy>minenergy*1000:
x=events['X'][i]
y=events['Y'][i]
radius2=(x-xcen)*(x-xcen)+(y-ycen)*(y-ycen)
if radius2<=radius*radius:
times.append(events['TIME'][i])
print times
如有任何帮助,我们将不胜感激。我是其他语言的 ok 程序员,但我以前真的不必担心 Python 的效率。我现在选择在 Python 中执行此操作的原因是我将 fortran 与 FITSIO 和 PGPLOT 以及 Numerical Recipes 中的一些例程一起使用,但是无法说服我在这台机器上使用的新的 fortran 编译器生成正常工作的程序(有一些 32 位与 64 位的问题,等等)。 Python 似乎具有我需要的所有功能(FITS I/O、绘图等),但如果访问列表中的各个元素需要很长时间,我将不得不寻找其他解决方案。
非常感谢。
最佳答案
您需要使用 numpy 向量运算来执行此操作。如果没有像 numba 这样的特殊工具,在 Python 中像你所做的那样进行大循环总是很慢,因为它是一种解释型语言。您的程序应该更像:
energy = events['PI'] / 1000.
e_ok = (energy > min_energy) & (energy < max_energy)
rad2 = (events['X'][e_ok] - xcen)**2 + (events['Y'][e_ok] - ycen)**2
r_ok = rad2 < radius**2
times = events['TIMES'][e_ok][r_ok]
这应该具有与 Fortran 相当的性能。您还可以过滤整个事件表,例如:
events_filt = events[e_ok][r_ok]
times = events_filt['TIMES']
关于python - astropy.io 适合大表的高效元素访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31315325/
我尝试在 astropy 表的 numpy 数组中转换一个 astropy 表列表。在第一个实例中,我尝试了 np.asarray(list) 和 np.array(list) 但列表中的 astro
所以我正在尝试使用 Astropy 并且我确实下载了它。但是,我收到一个错误。我正在尝试使用 Python 2 而不是 Python 3。 代码只是: import astropy astropy.t
我正在为 Raspberry Pi 开发一个应用程序,以控制 AltAzimutal 支架上的业余望远镜。 方位轴与天顶不完全对齐。在这种情况下,可以指向 2 或 3 颗星并找到视望远镜和赤道坐标之间
我目前是天文学的初学者,作为项目的一部分,我必须导入一些拟合文件或分析。但是,当我运行代码来导入 astropy.io 时,出现权限错误。 Traceback (most recent call la
我正在 Astropy 中进行坐标转换。但这不能正常工作。情况如下,我有一个 J2000 中的恒星坐标,我想将其转换为实际的纪元(或其他特定日期)。我正在使用 Stellarium 提供的坐标验证代码
我有一个适合的事件数据文件,我需要通过添加一个新的数据列来修改其中一个表,该数据列由存储在同一个表的预先存在的列中的数据派生。我遇到的问题是关闭修改后的文件。这是代码: data = fits.ope
我正在尝试使用 astropy.modeling 包将高斯拟合到一组数据点,但我得到的只是一条平线。见下文: 这是我的代码: %pylab inline from astropy.modeling i
我在为 python 安装 astropy 时遇到问题。当我在终端中输入“pip install astropy”时,我收到以下消息: Collecting astropy Using cached
我正在尝试使用 Python 和 astropy.io 从 FITS 文件中的二进制表中提取数据。该表包含一个事件数组,其中包含超过 200 万个事件。我想要做的是将某些事件的 TIME 值存储在一个
我有一个辐射源的多波段目录(来自 SourceExtractor,如果你想知道的话),我已将其读入以下形式的天体表: Source # | FLUX_APER_BAND1 | FLUXERR_APER
我正在尝试在 Python 中创建一个 FITS 文件,但在将 header 和 PrimaryHDU 一起编译时我似乎遇到了问题。 我做了一个简单的例子,它将给出我得到的错误: import num
我有一个保存星星数据的 astropy.table.table 对象。每颗星一行,列中包含星名、最大星等数据。 我知道 astropy 表的内部表示是每一列的字典,行作为字典对象的切片即时返回。 我需
我有一个 for 循环,它生成几个变量,例如 a、b 和 c。我想在 for 循环结束后,垂直堆叠变量。这是我想做的。 (为了举例,假设变量只是数字(1,2,3))。 from astropy.tab
我最近将我的 python 代码升级到了 Python 3.4.2。我运行的是 Ubuntu 14.10。 我使用了 pip3 和 apt-get python3- 的组合来升级我所有常用的模块:nu
我在 equatorial coordinates 中有一组点我需要将它们投影到平面上,即:天顶角或 azimuthal projection . astropy 显然能够执行这种类型的投影,amon
考虑一个astropy Table() object . from astropy.io import ascii weather_data = """ day,precip,type ,1.
我有一个看起来像这样的 astropy 表: $ print(astro_table) id xcentroid ycentroid sharpness roun
在以前的 astropy 版本中,可以按照以下方式处理不确定性的传播: from astropy.nddata import NDData, StdDevUncertainty x = NDData(
我在这里看到了几个关于 PyEphem 的答案,以及它如何产生日落/日出时间,但是如果我能找到仅使用 Astropy 包的解决方案,这对我来说会更有用。目前,我发现最接近的是 astropy.coor
我有两个源,其赤道坐标 (ra, dec) 和 (ra_0, dec_0) 位于距离 r 和 r_0,我需要计算它们之间的 3D 距离。 据我所知,我使用的两种方法应该给出相同的结果,但实际上没有。
我是一名优秀的程序员,十分优秀!