【问题标题】:Efficient way to build a data set from fits image从拟合图像构建数据集的有效方法
【发布时间】:2018-02-22 18:11:42
【问题描述】:

我有一组适合的图像:大约 32000 张图像,分辨率为 (256,256)。我要构建的数据集类似于矩阵,因此输出形状为 (32000, 256*256)。

简单的解决方案是for 循环,类似:

#file_names is a list of paths
samples=[]
for file_name in file_names:
    hdu=pyfits.open(file_name)
    samples.append(hdu[0].data.flatten())
    hdu.close()
#then i can use numpy.concatenate to have a numpy ndarray

这个解决方案非常非常慢。 那么构建如此大的数据集的最佳解决方案是什么?

【问题讨论】:

  • 如果你注释掉 samples.append 部分并运行它仍然很慢吗?如果是这样,那么这表明您在打开和关闭 FITS 文件时遇到了瓶颈。您也可以尝试使用 astropy FITS 阅读器docs.astropy.org/en/stable/io/fits/…

标签: python python-3.x dataset pyfits


【解决方案1】:

这并不是真正的主要答案,但我觉得评论太长了,而且很相关。

我相信你可以在不调整代码的情况下做一些事情。

Python 是一种语法语言,并以不同的方式实现。传统的实现是 CPython,这是您从网站下载的。但是,还有其他实现(请参阅here)。

长话短说,试试PyPy,因为它通常使用像你这样的“内存密集型python”运行得更快。 Here 是一篇非常好的 reddit 帖子,介绍了每种方法的优点,但基本上使用 PyPy,并优化您的代码。此外,我从未使用过 Numpy,但 post 建议您可以保留 Numpy 并仍然使用 PyPy。

(通常,我也建议您使用Cython,但它似乎根本无法与 Numpy 很好地配合使用。我不知道 Cython 是否支持 Numpy,但您可以自己 google。)祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    • 2018-12-02
    相关资源
    最近更新 更多