gpt4 book ai didi

python - 使用 scipy 的各种稀疏矩阵乘积的性能

转载 作者:太空宇宙 更新时间:2023-11-03 21:28:10 25 4
gpt4 key购买 nike

我有一个术语文档矩阵作为稀疏矩阵(csr 或 coo 矩阵),以及一个我想要进行相似性比较的特征向量。我想尝试以下方法:

1.) 将 doc 矩阵作为 csr 矩阵,将其转换为 ndarray,然后迭代行并使用 scikit 进行余弦相似度学习 ndarray 之间的余弦相似度。

2.)将doc矩阵作为csr矩阵,将其转换为ndarray,然后将矩阵与向量进行矩阵乘积,然后除以幅度和反余弦以获得相似度分数

3.) 将 doc 矩阵作为 coo 矩阵,使用 zip 函数快速迭代索引(同时跟踪您所在的行),并在不利用 ndarray 的矢量化方面的情况下进行余弦相似度计算

尽管第一个方法利用了快速向量化和内置余弦相似度方法,但对于大型矩阵而言,它的内存性能较差(因为您必须转换为稠密形式)。

第二种方法的内存性能也很差,但比第一种方法更能利用矢量化,尽管它需要更多的操作(尽管这些操作也会矢量化),但不能使用内置的余弦相似度方法

第三种方法以牺牲矢量化速度为代价来保持矩阵的稀疏性,但是迭代 coo 矩阵的 zip 方法对于大型矩阵来说速度很快。此实现将是更脏的代码并且没有矢量化。

哪一个是最好的方法?

最后,我想知道是否有一种方法可以迭代 csr 矩阵的行(如 ndarrays),然后进行矢量化余弦相似度。此方法只会将各个行转换为密集形式,并允许使用内置函数进行余弦相似性,因此是一种在一定程度上保留稀疏性并允许矢量化操作的中间方法。有没有办法轻松做到这一点?

最佳答案

您不需要将稀疏矩阵转换为密集numpy数组,您可以使用其.dot()属性:term_doc.dot(feat_vec)

sparse.linalg 对于计算行范数而不需要转换为数组非常有用:

from scipy import sparse
sparse.linalg.norm(term, axis=1)

这为您提供了计算余弦相似度所需的一切

关于python - 使用 scipy 的各种稀疏矩阵乘积的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53707288/

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