1

我有一组适合的图像:大约 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

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

4

1 回答 1

1

这并不是真正打算成为主要答案,但我觉得评论太长并且相关。

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

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

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

(通常,我也建议您使用Cython,但它似乎与 Numpy 完全不兼容。我不知道 Cython 是否支持 Numpy,但您可以自己搜索。)祝你好运!

于 2017-09-13T22:39:01.437 回答