快速ascii加载器到NumPy阵列

问题描述 投票:1回答:1

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

我一直在谷歌搜索替代品,当然我偶然发现了pandas.read_csv和astropy io.ascii。但是,这些阅读器似乎不容易与它们的库分离,我想避免添加一个200 MB,5秒导入时间的大猩猩只是为了阅读一些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文件包含简单的浮点数,没有科学记号,没有特定的数据,没有有趣的东西,除了简单的浮点数之外别无他物。

样品:

{

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

}

pandas performance numpy ascii astropy
1个回答
0
投票

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

将自己的CSV写入Numpy阵列阅读器是一种选择吗?如果CSV很简单,那么应该可以使用~100行例如C / Cython,如果你知道你的CSV格式,你可以获得通用解决方案无法打败的性能和包大小。

您可以看到的另一个选择是https://odo.readthedocs.io/。我没有经验,从快速看我没看到直接CSV - > Numpy。但它确实使得快速的CSV - >数据库变得简单,而且我确信有快速的数据库 - > Numpy数组选项。所以它可能会变得很快,例如CSV - >内存中的SQLite - > Numpy数组通过odo和可能的第二个包。

© www.soinside.com 2019 - 2024. All rights reserved.