众所周知[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文件包含简单的浮点数,没有科学的符号,没有fortran特定数据,没有有趣的东西,除了简单的浮点数< / em>。
示例:
{
arr = np.random.rand(1000,100)
np.savetxt('float.csv',arr)
}
答案 0 :(得分:0)
我个人只是为此使用pandas
和astropy
。是的,它们的导入工作量很大且速度较慢,但是非常容易获得,并且在我的机器上导入时间不到一秒钟,因此它们还不错。我还没有尝试过,但是我认为从熊猫或astropy中提取CSV阅读器并使其独立构建和运行并不是一件容易的事,也许不是一个好方法。
是否可以将自己的CSV写入Numpy数组读取器?如果CSV很简单,则应该可以处理大约100行,例如C / Cython,如果您知道CSV格式,则可以获得通用解决方案无法比拟的性能和包装尺寸。
您可以查看的另一个选项是https://odo.readthedocs.io/。我没有经验,快速浏览后我看不到直接CSV-> Numpy。但这确实使快速CSV->数据库变得简单,并且我确定有快速数据库-> Numpy数组选项。因此可能会很快CSV->内存中的SQLite->通过odo的Numpy数组,可能还有第二个包。