我必须遍历超过4000个项目的列表,并使用python中的推荐算法检查它们的相似性。
运行脚本需要很长时间(10-11个小时),我想合并多线程来提高速度,但不知道如何准确地做到这一点。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
data=pd.read_csv('data.csv',index_col=0, encoding="ISO-8859-1")
# Get list of unique items
itemList=list(set(data["product_ref"].tolist()))
# Get count of customers
userCount=len(set(data["customer_id"].tolist()))
# Create an empty data frame to store item affinity scores for items.
itemAffinity= pd.DataFrame(columns=('item1', 'item2', 'score'))
def itemUsers(ind):
return data[data.product_ref==itemList[ind]]["customer_id"].tolist()
rowCount=0
for ind1 in range(len(itemList)):
item1Users = itemUsers(ind1)
pool = Pool()
pool.map(loop2, data_inputs)
for ind2 in range(ind1+1, len(itemList)):
print(ind1, ":", ind2)
item2Users = itemUsers(ind2)
commonUsers= len(set(item1Users).intersection(set(item2Users)))
score=commonUsers / userCount
itemAffinity.loc[rowCount] = [itemList[ind1],itemList[ind2],score]
rowCount +=1发布于 2018-06-19 22:28:09
并入多线程不会改善你的运行时间。
这样想吧,当你多线程时,你将计算时间分散在多个线程之间--当你可以将其分散到一个进程中时。
例如,当你在线程上等待用户输入,你想在等待时进行计算,但这不是你的情况,它可能会有所帮助。
https://stackoverflow.com/questions/50930805
复制相似问题