【问题标题】:Fast ascii loader to NumPy arraysNumPy 数组的快速 ascii 加载器
【发布时间】:2019-02-13 17:58:27
【问题描述】:

众所周知 [1] [2] numpy.loadtxt 在加载包含数字的简单文本文件时并不是特别快。

我一直在寻找替代方案,当然我偶然发现了 pandas.read_csv 和 astropy io.ascii。然而,这些阅读器似乎并不容易从他们的库中分离出来,我想避免添加一个 200 MB、5 秒导入时间的 gorilla 来阅读一些 ascii 文件。

我通常阅读的文件很简单,没有丢失数据,没有格式错误的行,没有 NaN,只有浮点,空格或逗号分隔。但我需要 numpy 数组作为输出。

有谁知道上述任何解析器是否可以独立使用或我可以使用的任何其他快速解析器?

提前谢谢你。

[1]Numpy loading csv TOO slow compared to Matlab

[2]http://wesmckinney.com/blog/a-new-high-performance-memory-efficient-file-parser-engine-for-pandas/

[编辑 1]

为了清楚起见并减少背景噪音:正如我在开始时所说,我的 ascii 文件包含简单的浮点数,没有科学记数法,没有特定于 fortran 的数据,没有有趣的东西,只有 简单的浮点数。

示例:

{

arr = np.random.rand(1000,100)
np.savetxt('float.csv',arr)

}

【问题讨论】:

  • 类似的当前问题,stackoverflow.com/questions/52232559/…。不是重复的,因为它也没有答案。
  • 加载数组的典型形状是什么?
  • 请提供一些示例行。
  • 如果导入时间是个问题,我想知道您是否只需拉入pandas.io 的相关部分即可节省一些时间,以避免获取完整的 API。
  • @hjpauli,它变化很大,我有一些文件包含大约 30x3 的数据,还有许多文件高达 10,000x9。

标签: pandas performance numpy ascii astropy


【解决方案1】:

我个人只使用pandasastropy。是的,它们很大而且导入速度很慢,但是非常广泛可用,并且在我的机器上导入不到一秒钟,所以它们还不错。我没有尝试过,但我认为从 pandas 或 astropy 中提取 CSV 阅读器并让它独立构建和运行并不是那么容易,可能不是一个好方法。

将您自己的 CSV 写入 Numpy 数组读取器是一种选择吗?如果 CSV 很简单,则应该可以处理约 100 行的例如C / Cython,如果你知道你的 CSV 格式,你可以获得通用解决方案无法比拟的性能和包大小。

您可以查看的另一个选项是 https://odo.readthedocs.io/ 。我没有这方面的经验,快速浏览一下,我没有看到直接的 CSV -> Numpy。但它确实使快速 CSV -> 数据库变得简单,而且我确信有快速数据库 -> Numpy 数组选项。所以它可能会变得更快,例如CSV -> in-memory SQLite -> Numpy array via odo 和可能的第二个包。

【讨论】:

  • 感谢您的建议。似乎 odo 在引擎盖下使用了熊猫,所以回到第一个...
猜你喜欢
  • 1970-01-01
  • 2015-12-12
  • 1970-01-01
  • 2019-01-20
  • 1970-01-01
  • 2016-08-14
  • 1970-01-01
  • 2011-03-25
  • 2012-11-15
相关资源
最近更新 更多