用Python连接字符串-最快的方法是什么

时间:2019-02-21 20:58:14

标签: python numpy

我需要通过套接字发送图像,并且需要尽快完成。 图像表示为3d numpy数组。 发送的数据可以超过500000字节。

截至目前,我是这样做的:

array_data_type = image.dtype.name
array_shape = image.shape
to_send = array_data_shape + SEPARATOR + cPickle.dumps(array_shape) + SEPARATOR + image.tobytes()
streaming_socket.sendall(to_send)

串联现在需要大约0.044秒,我希望它更快。可以更快吗?

1 个答案:

答案 0 :(得分:2)

使用join方法创建单个str结果,而不是在评估每个str操作时创建一系列临时+对象。

to_send = SEPARATOR.join([array_data_shape, cPickle.dumps(array_shape), image.tobytes()])

您当前的代码等同于

tmp1 = array_data_shape + SEPARATOR
tmp2 = tmp1 + cPickle.dumps(array_shape)
tmp3 = tmp2 + SEPARATOR
to_send = tmp3 + image.tobytes()

,每个+都必须将其两个参数复制到其构造的新str中。最终结果的长度*的运行时间是平方,而SEPARATOR.join是线性的。


*无论如何,假设您要加入的事物的大小大致相等。严格来说,每个+的参数大小都是线性的,并且单个项目被复制的次数与剩余量成正比。假设xi代表第i个字符串的大小,则完成的总工作量为(x1 + x2) + (x1 + x2 + x3) + ... + (x1 + x2 + ... + xn)