我正在做一些关于重复数据删除的字符串。 我的主要工作流程是:稀疏矩阵乘法只计算上三角形
df = pd.read_csv(some_path)
vect = TfidfVectorizer(min_df=1)
tfidf = vect.fit_transform(df.title.astype(unicode))
sml_matrix = (tfidf * tfidf.T)
sml_matrix = sml_matrix> similar_ratio
的sml_matrix会是这样:
│CHEESE CHORES GEESE GLOVES
───────┼───────────────────────────
CHEESE │ 1 0.222 0.177 0.444
CHORES │0.222 1 0.422 0.333
GEESE │0.177 0.422 1 0.300
GLOVES │0.444 0.333 0.300 1
显然,计算sml_matrix的上三角就足够了。
但我不知道如何只计算与scipy.sparse矩阵上三角(仅for循环我可以想像,但似乎不太有效)
for循环示例(只是伪代码):
A = tfidf
T = tfidf.T
side_length = len(A)
for i in range(side_length):
for j in range(side_length):
if j < i:
# avoid calculate lower triangle and diagonal
continue
maxtrix[i,j] = A(i)* T(j)
从here,我看到numpy的有np.apply_along_axis(d, 0, _)
只计算上的三角形,但scipy.sparse
没有。
更新:
不管大的数据集是怎么了,只计算上三角将花费更少的CPU resource.I我不熟悉矩阵运算,好奇心让我问这个问题(如何只计算稀疏矩阵中的上三角),而不是用于解决内存错误。
您可能会遇到填充问题。 'tfidf * tfidf.T'可能会非常密集 - 例如,如果'tfidf'中只有一个密集列(即所有文档中存在单一特征),那么'sml_matrix'将是100%密集的,即使其他功能都非常稀疏。如果你认为'tfidf * tfidf.T'是完全密集的,你甚至可以把它的上三角形放在内存中吗? –