【问题标题】:How to store HUGE python list as a file and then read the file as a list in python?如何将巨大的 python 列表存储为文件,然后在 python 中将文件作为列表读取?
【发布时间】:2019-12-10 22:14:15
【问题描述】:

我正在做一个机器学习项目,我的数据集由数千张 X 光照片组成,每次我想处理这个项目时,我都必须重新加载图片并对其进行预处理,这非常耗时-消耗所以我想读取我的图像一次并将数千个 224x224x3 矩阵的列表写入一个文件中,我可以在每次需要处理这个项目时加载该文件。

我已经找到了一些允许我写/读列表的函数,但它们似乎没有写出整个矩阵,而只是写了一部分:

这是我用来编写文件的代码:

with open(obj_dir +"train_data_p", "w") as file:
  file.write(str(train_data_p))

这是我用记事本打开训练数据集文件时得到的结果,从“...”部分可以看出,它只显示矩阵的 sn-ps:

[array([[[0.26666668, 0.26666668, 0.26666668],
        [0.32156864, 0.32156864, 0.32156864],
        [0.33333334, 0.33333334, 0.33333334],
        ...,
        [0.75686276, 0.75686276, 0.75686276],
        [0.77254903, 0.77254903, 0.77254903],
        [0.7764706 , 0.7764706 , 0.7764706 ]],
   [[0.27058825, 0.27058825, 0.27058825],
    [0.28627452, 0.28627452, 0.28627452],
    [0.31764707, 0.31764707, 0.31764707],
    ...,
    [0.7607843 , 0.7607843 , 0.7607843 ],
    [0.7647059 , 0.7647059 , 0.7647059 ],
    [0.8039216 , 0.8039216 , 0.8039216 ]],

   [[0.3019608 , 0.3019608 , 0.3019608 ],
    [0.34901962, 0.34901962, 0.34901962],
    [0.27058825, 0.27058825, 0.27058825],
    ...,
    [0.78431374, 0.78431374, 0.78431374],
    [0.7764706 , 0.7764706 , 0.7764706 ],
    [0.78431374, 0.78431374, 0.78431374]],

   ...,

   [[0.1254902 , 0.1254902 , 0.1254902 ],
    [0.1254902 , 0.1254902 , 0.1254902 ],
    [0.12156863, 0.12156863, 0.12156863],

如何写入/存储整个数据集,这样我就不必每次都读取和处理图像? 请帮帮我!

【问题讨论】:

  • 考虑使用泡菜之类的东西

标签: python


【解决方案1】:

您可以通过numpy.save()numpy.load() 方法来做到这一点

import numpy as np
np.save('/tmp/123', np.array([[1, 2, 3], [4, 5, 6]]))
np.load('/tmp/123.npy')

【讨论】:

    【解决方案2】:

    您在文件中看到省略号的原因是您正在将str(train_data_p) 写入文件,而不是实际的train_data_p 对象。

    正如其他答案所指出的,有许多包可以帮助存储大数据。如果您使用的是 numpy,this 答案也可能对您有所帮助。

    【讨论】:

      【解决方案3】:

      您可以使用内置模块轻松序列化数据。

      我们有不同的选项列表:

      或 pip 中可用的任何其他 3rd 方序列化包。

      更多关于序列化https://en.wikipedia.org/wiki/Serialization

      【讨论】:

      • 对于大型数组来说不是一个好主意
      • 你为什么这么认为?它适用于任何大小的数组,pickle 最适合用于序列化的任何“通用对象”,而无需使用需要数据模式声明等的专用打包程序来构建它。
      • 无论如何,它比处理图像或任何其他数据源更好更快,这就是我相信这个问题的原因。
      猜你喜欢
      • 2018-04-20
      • 1970-01-01
      • 2018-08-28
      • 2018-02-01
      • 2022-11-10
      • 2012-05-04
      • 1970-01-01
      • 2021-06-29
      • 2023-01-19
      相关资源
      最近更新 更多