有4000万个数据集。当我要计算jaccard时,它报告内存错误。如何改进我的代码?
result=[]
for line in open("./raw_data1"):
#for line in sys.stdin:
#tagid_result = [0]*max_len
tagid_result = [0]*34
line = line.strip()
fields = line.split("\t")
if len(fields)<6:
continue
tagid = fields[3]
tagids = tagid.split(":")
try:
for i in range(0,len(tagids)):
tagid_result[i] = int(tagids[i])
except:
continue
result.append(tagid_result)
X=np.array(result)
distance_matrix = pairwise_distances(X, metric='jaccard')
print (distance_matrix)
答案 0 :(得分:0)
您的RAM即将用完。要计算N个向量之间的距离,您必须存储N ^ 2个距离值。 4000万^ 2的数据太多,无法容纳到内存中。有两种选择:
1)您必须将矩阵X分成子集。为每个子集创建一个成对的距离矩阵。然后将这些成对的距离矩阵缝合在一起。
2)您应该创建所有向量对的数据集。将每个向量存储在其自己的文件中。创建一个函数来读取两个矢量文件,计算它们的距离,然后返回距离值。将此功能应用于所有向量对。连接距离结果以创建距离矩阵。可以并行运行此功能,以更有效地计算距离矩阵。
我将选择解决方案2。