【发布时间】:2017-12-17 17:38:15
【问题描述】:
我有一个相当大的列表,代表搜狗文本分类数据集中的标记。我可以处理 450 000 的整个训练集,剩下 12 gigs 的 ram,但是当我在列表列表中调用 numpy.save() 时,内存使用量似乎翻了一番,而且我的内存用完了。
这是为什么? numpy.save 是否在保存之前转换列表但保留列表从而使用更多内存?
是否有另一种方法可以保存此列表列表,即酸洗?从 allow pickle 参数来看,我相信 numpy save 使用 pickle 协议:https://docs.scipy.org/doc/numpy/reference/generated/numpy.save.html
print "Collecting Raw Documents, tokenize, and remove stop words"
df = pd.read_pickle(path + dataSetName + "Train")
frequency = defaultdict(int)
gen_docs = []
totalArts = len(df)
for artNum in range(totalArts):
if artNum % 2500 == 0:
print "Gen Docs Creation on " + str(artNum) + " of " + str(totalArts)
bodyText = df.loc[artNum,"fullContent"]
bodyText = re.sub('<[^<]+?>', '', str(bodyText))
bodyText = re.sub(pun, " ", str(bodyText))
tmpDoc = []
for w in word_tokenize(bodyText):
w = w.lower().decode("utf-8", errors="ignore")
#if w not in STOPWORDS and len(w) > 1:
if len(w) > 1:
#w = wordnet_lemmatizer.lemmatize(w)
w = re.sub(num, "number", w)
tmpDoc.append(w)
frequency[w] += 1
gen_docs.append(tmpDoc)
print len(gen_docs)
del df
print "Saving unfiltered gen"
dataSetName = path + dataSetName
np.save("%s_lemmaWords_noStop_subbedNums.npy" % dataSetName, gen_docs)
【问题讨论】:
-
这些“令牌”是什么?数值数据?还是更复杂的对象?
-
字符串,每个都是一个字
-
为什么要使用 numpy 来保存列表列表?这没有任何意义,如果它首先尝试从中创建一个数组,我不会感到惊讶。
-
您应该使用
pickle或 JSON 甚至将其设为 CSV -
我确实试过 allow_pickle=False: raise ValueError("Object arrays cannot be saved when " ValueError: Object arrays cannot be saved when allow_pickle=False