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
并且不要循环播放它。
c
、cc
、b
和 l
都将是数组(尽管有些是 SkyCoord
数组),长度与 ra1
和 dec1
.
对于您机器上的 180,000,这应该不到一秒就可以到达 运行。
当您的数据(列表)增长到超过 10,000 或 100,000 个元素时,您几乎不需要 运行 在 Python 中使用 for 循环 .使用 numpy(或此处为 astropy),或者如果没有其他选择,请寻找 Cython 或什至用 C 编写代码。(或使用 PyPi,但会失去很多库兼容性。)
Python 在循环(大)lists/arrays 时速度不快,而且它本来就不是这样。
我正在使用 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
并且不要循环播放它。
c
、cc
、b
和 l
都将是数组(尽管有些是 SkyCoord
数组),长度与 ra1
和 dec1
.
对于您机器上的 180,000,这应该不到一秒就可以到达 运行。
当您的数据(列表)增长到超过 10,000 或 100,000 个元素时,您几乎不需要 运行 在 Python 中使用 for 循环 .使用 numpy(或此处为 astropy),或者如果没有其他选择,请寻找 Cython 或什至用 C 编写代码。(或使用 PyPi,但会失去很多库兼容性。)
Python 在循环(大)lists/arrays 时速度不快,而且它本来就不是这样。