将numpy数组转换为字符串的最有效方法

Most efficient way to convert numpy array to string

我 运行 一些模拟速度太慢,所以我分析了我的代码,发现超过 90% 的时间都花在了将 (2D) numpy 数组转换为字符串上,因为在:

arr = np.ones(25000).reshape(5000,5)
s = '\n'.join('\t'.join([str(x) for x in row]) for row in arr]

我尝试了很多不同的解决方案(使用 map、使用 astype(str) 转换数组、转换为列表),但大多数只提供了微小的改进。

最终我放弃了尝试将数组转换为字符串并使用 np.save(arr) 将其单独保存到一个文件中,结果是 2000x(!) 加速。有没有办法将数组写入具有类似性能的文本文件?

将 numpy 数组转换为人类可读的形式应该永远不会 确定您的模拟的运行 时间。事实上,它甚至不应该做出(显着)贡献。

你应该在不同的层面上解决这个问题。问问自己:您真正需要多久将数组写入 人类可读 形式的文件?它是否需要如此 often/regularly 以显着决定代码的 运行 时间?当某个结果存在时,仅一次是否足够?

当你采用这种方法时,你可能不需要优化你当前的写作方法。我可能想给出一些数字。考虑到您的模拟大约需要一个小时(不将结果写入磁盘)。我认为您同意,如果您的代码再花 10 秒钟将结果以人类可读的形式写入磁盘,那很好。这是否需要再花 10 秒、1 秒或 100 秒都没有关系。

如果出于某种原因您确实需要定期将中间结果写入磁盘以供以后处理 - 尽量减少频率,并使用 二进制 数据格式。

尝试使用 np.savetxt("file",arr)。请参阅此处的文档 - (http://docs.scipy.org/doc/numpy/reference/generated/numpy.savetxt.html).