CSR行向量计算cos similarity

CSR是scipy.sparse中的一种存储系数矩阵的格式,计算两个CSR行向量可以用sklearn的cosine_similarity(v1,v2)[0,0]函数,但是速度极慢。于是动手造轮子。
下面两层for循环对于系数向量来说其实很小,因为向量的列没有排序,所以只能用for 循环,再次排序再进行线性操作在这种数据量小的情况下没有意义。

            len_v1 = len_v2 = v1_dot_v2 = 0
            for i in range(v1.nnz):
                col1 = v1.indices[i]
                data1 = v1.data[i]
                len_v1 += data1 * data1
                for j in range(v2.nnz):
                    col2 = v2.indices[j]
                    data2 = v2.data[j]
                    if col1 == col2:
                        v1_dot_v2 += data1 * data2

                    if i == 0:
                        len_v2 += data2 * data2

            # aaa = cosine_similarity(v1,v2)[0,0]
            # bbb = v1_dot_v2 / math.sqrt(len_v1 * len_v2)
            return v1_dot_v2 / math.sqrt(len_v1 * len_v2)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 原文章为scikit-learn中"用户指南"-->"监督学习的第四节:Support Vector Machin...
    HabileBadger阅读 2,943评论 0 11
  • 看到一篇好文章分享出来,看别人是如何选特征的,作者是Edwin Jarvis 作者:Edwin Jarvis 特征...
    智能互连阅读 5,758评论 0 7
  • 本文是scikit-learn 支持向量机的翻译,原文地址:http://scikit-learn.org/sta...
    学以致用123阅读 3,381评论 0 4
  • 【我挽起袖子使劲撕开十层厚的牛皮纸箱,发现我的智障男朋友只是给我寄了一颗糖,TMD】 【宝格丽黑茶/Bvlgari...
    鲁比碎碎念阅读 500评论 0 0
  • 晚上在健身房锻炼完,就收到了妹妹的微信消息 “有空吗?我想聊聊。” 看到这句话的时候心里莫名的有种沉重感,因为从这...
    樱洛阅读 361评论 0 2

友情链接更多精彩内容