如何有效地从另一个数组中删除一个数组的元素

时间:2020-08-14 08:57:49

标签: python nlp data-analysis

我正在分析一个带有大约135k文档(每个文档几页)和大约80万个单词的词汇的语料库。我注意到一半的词汇是频率为1或2的单词,所以我想删除它们。

所以我正在运行类似这样的东西:

remove_indices = np.array(index_df[index_df['frequency'] <= 2]['index']).astype(int)

for file_name in tqdm(corpus):
    content = corpus[file_name].astype(int)
    content = [index for index in content if index not in remove_indices]
    corpus[file_name] = np.array(content).astype(np.uint32)

corpus如下所示:

{
    'filename1.txt': np.array([43, 177718, 3817, ...., 28181]).astype(np.uint32),
    'filename2.txt': ....
}

并且每个单词以前都被编码为正整数索引。

问题出在content = [index for index in content if index not in remove_indices]上,每次迭代都需要经过len(remove_indices) * len(content)次检查。这将永远(tqdm告诉我100h +)。关于如何加快速度的任何提示?

到目前为止我尝试过的事情

  • 利用以下事实:如果单词的频率仅为1或2,我们可以将其从语料库中删除后将其从remove_indices中删除。仍然永远...

1 个答案:

答案 0 :(得分:3)

您可以使用numpy.isin()方法https://numpy.org/devdocs/reference/generated/numpy.isin.html代替此列表理解。

或者,您可以创建现有单词/索引的set。然后,此in操作将是O(1)而不是O(n)(其中n是数组的长度)。

相关问题