提高python大列表双循环的速度

提高python大列表双循环的速度,python,loops,numpy,Python,Loops,Numpy,当主题长度和行数分别为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 = stri

当主题长度和行数分别为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))
对于j,在枚举(主题)中排名第一:
delwrite[:]
del排名[:]
文件。写入(“\n”)
对于i,枚举中的行(行\数据):
字符串=行
单词=字符串[:18]
tostr=字符串[20:]
vector=np.fromstring(tostr[:-2],dtype=float,sep=',')
尽管如此:
尝试:
cos=余弦_相似性(顶部[1]。重塑(1,-1),向量。重塑(1,-1))
cos_list=cos.重塑(1).tolist()
如果(i 50和排名[-1]
尝试重写:

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


字符串连接速度非常慢,所以join应该是一个加速过程。

与原始版本几乎相同多少时间对您来说太长了?它需要超过24小时。
for rank in ranked[:50]:
    elements = [rank[0],str(rank[1]),rank[2]]
    write.append(" ".join(elements))