gpt4 book ai didi

python - 保存大型 numpy 二维数组

转载 作者:太空宇宙 更新时间:2023-11-04 01:52:36 26 4
gpt4 key购买 nike

我有一个包含约 1,000,000 行的数组,每一行都是一个包含 4,800 个 float32 数字的 numpy 数组。我需要将其保存为 csv 文件,但是使用 numpy.savetxt 已经运行了 30 分钟,我不知道它会运行多长时间。有没有更快的方法将大数组保存为 csv?非常感谢,乔希

最佳答案

正如评论中所指出的,1e6 行 * 4800 列 * 每个 float32 4 字节是 18GiB。将 float 写入文本需要大约 9 个字节的文本(估计 1 个字节用于整数,1 个用于小数,5 个用于尾数,2 个用于分隔符),总计 40GiB。这需要很长时间才能完成,因为仅转换为文本本身就很重要,而且磁盘 I/O 将是一个巨大的瓶颈。

优化此过程的一种方法可能是根据您自己的条件将整个数组转换为文本,并使用 Python 的二进制 I/O 将其写入 block 中。不过,我怀疑这会给您带来太多好处。

更好的解决方案是将二进制数据写入文件而不是文本。除了空间和速度的明显优势外,二进制还有可搜索和加载后不需要转换的优点。您知道每个单独的元素在文件中的位置,如果您很聪明,则可以访问文件的某些部分而无需加载整个文件。最后,二进制文件比相对低熵的文本文件更有可能是高度可压缩的。

二进制的缺点是它不是人类可读的,也不像文本那样可移植。后者不是问题,因为转换成可接受的格式将是微不足道的。考虑到您无论如何都尝试处理的数据量,前者可能不是问题。

请记住,人类可读性是一个相对术语。一个人无法理解地阅读 40iGB 的数字数据。人类可以处理 A) 数据的图形表示,或 B) 扫描相对较小的数据部分。这两种情况都适用于二进制表示。案例 A) 很简单:加载、转换和绘制数据。如果数据已经是可以直接传递给分析和绘图例程的二进制格式,这会快得多。案例 B) 可以用内存映射文件之类的东西来处理。您只需要加载文件的一小部分,因为您一次只能在屏幕上显示超过一千个元素。任何合理的现代平台都应该能够保持与用户在表格小部件或类似部件上滚动相关联的 I/O 和二进制到文本的转换。事实上,二进制使它更容易,因为您确切地知道每个元素在文件中的位置。

关于python - 保存大型 numpy 二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57679863/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com