Hua*_*ang 1 python data-conversion coordinates astropy
我正在使用AstroPy SkyCoord从赤道坐标到数百万个数据的银河坐标转换,它非常慢.任何人都有想加快速度,否则需要永远运行整个数据集.代码如下:
from astropy import units as u
from astropy.coordinates import SkyCoord
import numpy as np
ra1 = np.loadtxt('data.txt',usecols=(0,))
dec1 = np.loadtxt('data.txt',usecols=(1,))
size = len(ra1)
for i in range(size):
ra = ra1[i]
dec = dec1[i]
c = SkyCoord(ra*u.degree, dec*u.degree)
cc = c.galactic
b = cc.b.degree
l = cc.l.degree
Run Code Online (Sandbox Code Playgroud)
小智 11
我循环遍历整个数据,但逐个进行转换.
不要那样做.想象矢量,就像numpy一样.星座中的大多数例程都是用于向量的.
从而:
from astropy import units as u
from astropy.coordinates import SkyCoord
import numpy as np
c = SkyCoord(np.array(ra1)*u.degree, np.array(dec1)*u.degree)
cc = c.galactic
b = cc.b.degree
l = cc.l.degree
Run Code Online (Sandbox Code Playgroud)
并且不要在它上面循环.
c,cc,b并l都将阵列(尽管有些是SkyCoord阵列),具有相同的长度ra1和dec1.
对于您机器上的180,000,运行时间不到一秒.
当您的数据(列表)增长到超过10,000或100,000个元素时,几乎不必在Python中运行for循环.使用numpy(或astropy here),或者如果没有其他选项,请寻找Cython甚至用C语言编写代码.(或者使用PyPi,但这会失去很多库兼容性.)
在循环(大)列表/数组时,Python并不快,而且它从来就没有意义.
| 归档时间: |
|
| 查看次数: |
659 次 |
| 最近记录: |