【发布时间】:2019-07-22 12:12:57
【问题描述】:
现在我有 8000 万行,60 万列,5 亿个值是非零的。它很稀疏。我选择 scipy api dok_matrix 来存储它。使用 dok_matrix 时的内存是多少,看起来是不仅存储非零值。
我有 5 亿个非零值,但内存不足,为什么?
a = ss.dok_matrix((8000000,600000))
dict1={}
dict2={}
index1=0
index2=0
for line in open("./data"):
line = line.strip()
fields = line.split("\t")
if len(fields)<3:
continue
key1 = fields[0]
key2 = fields[1]
value = float(fields[2])
if key1 not in dict1:
dict1[key1] = index1
index1 += 1
if key2 not in dict2:
dict2[key2] = index2
index2 += 1
a[dict1[key1],dict2[key2]] = value
print ("ok")
b = a.getrow(0).items()
for i in b:
print (i[0][1],i[1])
在我看来,它只需要非零,100 亿 =1G,所以它不应该 oom。对于这种情况,我如何存储大的稀疏特征?
【问题讨论】:
-
dok是 pythondict的子类。这不是一个紧凑的内存高效存储。
标签: python numpy scipy sparse-matrix