AstroPy SkyCoord 极慢,如何解决?

AstroPy SkyCoord extremely slow, how to resovle it?

我正在使用 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

I loop over the whole data, but do the conversion one by one.

不要那样做。从向量的角度思考,就像 numpy 一样。 astropy 中的大多数例程都是按向量使用的。

因此:

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

并且不要循环播放它。

cccbl 都将是数组(尽管有些是 SkyCoord 数组),长度与 ra1dec1.

对于您机器上的 180,000,这应该不到一秒就可以到达 运行。


当您的数据(列表)增长到超过 10,000 或 100,000 个元素时,您几乎不需要 运行 在 Python 中使用 for 循环 .使用 numpy(或此处为 astropy),或者如果没有其他选择,请寻找 Cython 或什至用 C 编写代码。(或使用 PyPi,但会失去很多库兼容性。)

Python 在循环(大)lists/arrays 时速度不快,而且它本来就不是这样。