gpt4 book ai didi

python - 用numpy保存列表时内存不足

转载 作者:行者123 更新时间:2023-12-04 14:24:52 32 4
gpt4 key购买 nike

我有一个相当大的列表列表,代表搜狗文本分类数据集中的标记。我可以处理 450 000 的整个训练集,剩下 12 gig 的 ram,但是当我在列表列表中调用 numpy.save() 时,内存使用量似乎翻了一番,并且内存不足。

为什么是这样? numpy.save 是否在保存之前转换列表但保留列表从而使用更多内存?

有没有另一种方法来保存这个列表列表,即酸洗?我相信 numpy save 使用了 pickle 协议(protocol),从 allow 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)

最佳答案

np.save首先尝试将输入转换为数组。毕竟它旨在保存 numpy 数组。

如果生成的数组是具有数字或字符串值 (dtype) 的多维数组,它会保存一些基本维度信息,以及数组数据缓冲区的内存副本。

但是如果数组包含其他对象(例如 dtype 对象),那么它会腌制这些对象,并保存结果字符串。

我会尝试

arr = np.array(gen_docs)

这会产生内存错误吗?

如果不是,它是什么 shapedtype ?

如果 tmpDoc (子列表)长度不同 arr将是一个具有对象数据类型的一维数组 - 这些对象是 tmpDoc列表。

只有当所有 tmpDoc具有相同的长度会产生一个二维数组。即便如此,dtype 也将取决于元素,无论是数字、字符串还是其他对象。

我可能会补充说,一个数组是用 save 腌制的。协议(protocol)。

关于python - 用numpy保存列表时内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47857782/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com