在Python中,打开文件处理程序的过程比实际写入时间慢吗?
一个大文件,一个文件处理程序
import marshal
bigDataStructure = [[1000000.0 for j in range(1000000)] for i in range(1000000)]
f = open('bigFile' , 'w')
marshal.dump(bigDataStructure , f)
f.close()
多个较小的文件,多个文件处理程序
for i , row in enumerate(bigDataStructure):
f = open(str(i) , 'w'):
marshal.dump(row , f)
f.close()
最佳答案
您提到如果将它们全部合并,则会耗尽内存 - 这是很多的神经元。 (至少,根据我的经验,几百个神经元对于我们在计算机科学类(class)中编写的玩具程序来说已经足够了。)
您可能不想创建 100,000 个单独的文件来存储 100,000 个单独的神经元,当然也不想创建 1,000,000 个文件来存储 1,000,000 个神经元。目录查找、文件打开、读取、关闭和少量 IO 的 IO 开销将极大地影响大量神经元的加载和保存。
当然,如果您考虑的是 50 或 100 个神经元,那么无论如何都会很快,并且可能需要最简单的实现。
但如果这是我的,我会努力尝试为神经元构建良好的数据结构:也许给定级别的所有神经元都可以用一个整数来描述,以选择神经元类型和整数数组或加倍来描述每个神经元的特征,并且这些级别描述的列表可以很容易地写入单独的文件或单个文件,以更容易的为准。
如果你的神经元在一个级别内改变类型,或者在级别之间没有完全连接,你可能会发现一些sparse matrix storage设计对于可以同时描述所有神经元的更大数据结构很有用。
也许真正的问题应该是“如何提高神经元的存储能力?”
更新
我认为即使是 10,000 个神经元也有理由制作“组合”存储格式。我刚刚创建了 10,000 个小文件,删除了缓存以测试冷启动,然后单独重新读取每个文件。读入 10,000 个文件需要 14.6 秒。读取包含与 10,000 个文件相同数据的单个文件仅花费 0.1 秒。
如果您的网络每年左右都会“冷”一次,也许这并不重要。但如果您的网络每天冷启动十几次,您可能会逐渐讨厌这种简单的存储格式。
关于python - 打开多个文件处理程序是否会减慢写入时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7883521/