【发布时间】:2010-04-27 13:20:43
【问题描述】:
我有一个程序需要将许多大型一维 numpy 浮点数组转换为分隔字符串。我发现这个操作相对于我程序中的数学运算非常慢,我想知道是否有办法加快它。例如,考虑以下循环,它在一个 numpy 数组中获取 100,000 个随机数,并将每个数组连接成一个逗号分隔的字符串。
import numpy as np
x = np.random.randn(100000)
for i in range(100):
",".join(map(str, x))
此循环大约需要 20 秒才能完成(总计,不是每个循环)。相比之下,考虑像元素乘法 (x*x) 这样的 100 个循环将花费不到 1/10 秒的时间来完成。显然,字符串连接操作会造成很大的性能瓶颈;在我的实际应用程序中,它将主导总运行时间。这让我想知道,有没有比 ",".join(map(str, x)) 更快的方法?由于 map() 是几乎所有处理时间发生的地方,这归结为是否有更快的方法将大量数字转换为字符串。
【问题讨论】:
-
是数字到字符串的转换需要时间吗?
-
乘以两个整数和转换/连接 100,000 个数字是完全不同的事情 - 你怎么能期望这两个操作在性能方面甚至在同一个球场?
-
马克 - 是的。蒂姆——没错。我的观点很简单,字符串操作会造成真正的瓶颈,如果有办法加快速度就好了。
-
float.hex比str快 25%。它可以使用"%a"格式以其他语言读回。