【问题标题】:Improve speed of python double loop of large lists提高大列表的python双循环速度
【发布时间】:2017-05-24 02:05:49
【问题描述】:

topics和lines_data的长度分别为100和1.5M时。我怎样才能提高它的速度。这需要太多时间。

我的代码如下:

for j, top in enumerate(topics):
    del write[:]
    del ranked[:]
    file.write("\n")
    for i, line in enumerate(lines_data):
        string = line
        word = string[:18]
        tostr = string[20:]
        vector = np.fromstring(tostr[:-2], dtype=float, sep=',')
        while True:
            try:
                cos = cosine_similarity(top[1].reshape(1, -1), vector.reshape(1, -1))
                cos_list = cos.reshape(1).tolist()
                if (i <= 50):
                    ranked += [(top[0], cos_list[0], word)]
                    ranked = sorted(ranked, key=lambda tup: tup[1], reverse=True)
                elif (i > 50 and ranked[-1] < cos_list[0]):
                    del (ranked[-1])
                    ranked += [(top[0], cos_list[0], word)]
                    ranked = sorted(ranked, key=lambda tup: tup[1], reverse=True)
                break
            except:
                raise
    for rank in ranked[:50]:
        write.append(rank[0] + " " + str(rank[1]) +" " + rank[2])

    file.write("\n".join(write))

【问题讨论】:

  • 多少时间对你来说时间太长了?
  • 耗时超过 24 小时。

标签: python loops numpy


【解决方案1】:

尝试重写:

for rank in ranked[:50]:
    write.append(rank[0] + " " + str(rank[1]) +" " + rank[2])

进入:

for rank in ranked[:50]:
    elements = [rank[0],str(rank[1]),rank[2]]
    write.append(" ".join(elements))

字符串连接真的很慢,所以连接应该是一个加速。

【讨论】:

  • 和原版差不多
猜你喜欢
  • 2019-08-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-06
  • 2015-03-24
  • 1970-01-01
  • 2014-07-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多