gpt4 book ai didi

python - AstroPy SkyCoord 极慢,如何解决?

转载 作者:太空宇宙 更新时间:2023-11-04 06:54:50 24 4
gpt4 key购买 nike

我正在使用 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 在(大)列表/数组上循环时并不快,而且它从来就不是这样。

关于python - AstroPy SkyCoord 极慢,如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36146183/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com