我正在运行一些模拟过程太慢,因此我对我的代码进行了剖析,发现超过90%的时间花在将(2D)numpy数组转换为字符串,如:将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)
,这给了一个2000X(!)加速其保存到自身的文件。有没有办法将数组写成具有类似性能的文本文件?
是的,这就是我最终做的 - 每个模拟只需要大约1.5毫秒,然后转换为一个字符串需要大约500毫秒。 – 2015-02-10 18:39:18
那么 - 你的问题解决了吗?如果不是这样:您需要执行多少次这些短模拟?什么是输出文件?对于人类还是机器?这些输出文件有多大? I/O是一个限制因素吗? – 2015-02-10 18:40:51
是的,问题解决了。我只是想知道是否有一种方法可以将numpy数组写入字符串,其性能与np.save(fn,arr)相同。 – 2015-02-10 18:42:55