繁体   English   中英

将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]

我尝试了很多不同的解决方案(使用地图,使用astype(str)转换数组,转换为列表),但是大多数解决方案仅带来了一点点改进。

最终,我放弃了尝试将数组转换为字符串,并使用np.save(arr)其保存到文件中的方法,从而使速度提高了2000倍 (!)。 有没有办法将数组写为具有类似性能的文本文件?

将numpy数组转换为人类可读的格式绝不能确定模拟的运行时间。 实际上,它甚至不应该做出任何贡献。

您应该在不同级别上解决此问题。 问问自己:您真正需要多久以一次可读格式将数组写入文件? 它是否需要经常/定期地发生,以至于极大地决定了代码的运行时间? 只要有一定的结果,只做一次就足够了吗?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM