Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >枕稀疏矩阵间的特殊余弦

枕稀疏矩阵间的特殊余弦
EN

Stack Overflow用户
提问于 2014-07-14 21:14:57
回答 1查看 2.3K关注 0票数 0

我试图计算两个向量的余弦相似性。这两个向量(称为Ri和Rj)是用户对项目i和j的评级,因此它们自然是稀疏的(因为通常只有少数用户会对特定项进行评级)。这些向量有50000行,只有0.1 %是非零的.

余弦相似性应涉及到共同评级的用户评级。例如,如果Ri和Rj是两个scipy.sparse.csc矩阵,并且它们的值是

Ri = 1,2,0,0,3,4 Rj = 0,1,0,3,5,2

那么共同评级是

Ri‘= 0,2,0,0,3,4 Rj’= 0,1,0,0,5,2

因此,余弦相似性应该是

内部(Ri‘,Rj') /(\x{e76f}\x{e76f}

我的问题是,是否有一种有效的方法(最好是非循环)来计算两个矩阵都有非零值的条目?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-14 21:45:38

不确定你在这里问的是哪个矩阵,但是假设变量中有两个原始数组,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Ri = [ 1, 2, 0, 0, 3, 4]; Rj = [ 0, 1, 0, 3, 5, 2]

这里是你如何建立共同评级和计算余弦相似,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np
Rip = np.array( [ i if j != 0 else 0 for i,j in zip(Ri,Rj) ] )
Rjp = np.array( [ j if i != 0 else 0 for i,j in zip(Ri,Rj) ] )

如果不想显式使用for语句,则可以使用映射,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Rip = map( lambda x,y: 0 if y == 0 else x, Ri, Rj )
Rjp = map( lambda x,y: 0 if x == 0 else y, Ri, Rj )

然后,可以使用RipRjp的这些显式(或密集)表示来计算余弦相似性。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cos_sim = float( np.dot( Rip, Rjp ) ) / np.sqrt( np.dot( Rip,Rip ) * np.dot( Rjp,Rjp ) )

如果不想显式地存储完整的数组,可以使用scipy.sparse将向量存储为稀疏的单行(列)矩阵。请注意,如果您这样做,np.dot将不再工作,您应该使用稀疏矩阵dot方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from scipy.sparse import csr_matrix

# make single column/row sparse matrix reps of Rip
row = np.array( [ i for (i,x) in enumerate(Rip) if x != 0 ] )
col = np.zeros( row.size, dtype=np.int32 )
dat = np.array( [ x for (i,x) in enumerate(Rip) if x != 0 ] )
Rip_col_mat = csr_matrix( (dat,(row,col) ) )
Rip_row_mat = csr_matrix( (dat,(col,row) ) )

# make single column/row sparse matrix reps of Rjp
row = np.array( [ i for (i,x) in enumerate(Rjp) if x != 0 ] )
col = np.zeros( row.size, dtype=np.int32 )
dat = np.array( [ x for (i,x) in enumerate(Rjp) if x != 0 ] )
Rjp_col_mat = csr_matrix( (dat,(row,col) ) )
Rjp_row_mat = csr_matrix( (dat,(col,row) ) )

现在,为了计算余弦相似性,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
inner = Rip_row_mat.dot( Rjp_col_mat ).data
Rip_m = np.sqrt( Rip_row_mat.dot( Rip_col_mat ).data )
Rjp_m = np.sqrt( Rjp_row_mat.dot( Rjp_col_mat ).data )

cos_sim = inner / ( Rip_m * Rjp_m )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24750270

复制
相关文章
怎样在ios上上架app
在上架App之前想要 真机测试的同学 请查看 iOS- 最全的真机测试教程 里面包含怎么让多台电脑同时 上架App和同时真机调试。P12文件的使用详解
iOS程序应用
2023/01/13
5330
在iOS上推流
编译librtmp需要用到openssl,所以先编译openssl,下载脚本OpenSSL。
Helloted
2022/06/07
8650
在iOS上推流
译 | 在 App Service 上禁用 Basic 认证
App Service 使用网站的发布配置文件中的基本身份验证凭据访问 FTP 和 WebDeploy。这些API非常适合浏览站点的文件系统,上传驱动和应用程序,以及通过MsBuild进行部署。但是,企业通常需要满足安全要求,而宁愿禁用此基本身份验证访问,以便员工只能通过由 Azure Active Directory(AAD)支持的API来访问公司的 App Services。
Edi Wang
2020/09/14
1.8K0
译 | 在 App Service 上禁用 Basic 认证
在CentOS/RHEL7上禁用IPv6
版权声明:本文为木偶人shaon原创文章,转载请注明原文地址,非常感谢。 https://blog.csdn.net/wh211212/article/details/80996364
shaonbean
2019/05/26
2.2K0
iOS 的系统类信息在栈上?
前言 今天有位群友抛出了一个很有意思的问题:为什么系统类的 class 地址比栈区变量更高? image-20210519235852843 iOS 进程内存布局 通常情况下,我们对进程内存的布局
酷酷的哀殿
2021/06/22
8100
iOS 的系统类信息在栈上?
在安卓手机或Win电脑上同步iOS上的日历
说说我的需求:我平时都是我的iPad上添加我日常的日程,但是如果要到电脑或安卓手机上也有同样的日历就比较不方便。
可定
2020/04/21
4.3K0
在安卓手机或Win电脑上同步iOS上的日历
在ios系统上实现更改IP地址
在当今的互联网环境中,我们经常需要更改手机的IP地址来避免一些限制或保护我们的隐私。然而,在iOS系统上,更改IP地址并不像在其他平台上那么容易。因此,本文将分享一种简单的方法,帮助您在iOS系统上免费更改手机的IP地址。
华科云商小徐
2023/09/14
1.9K0
如何定时自动关闭消息框?
我们知道,在VBA中可以使用MsgBox方法来弹出消息框,然而需要单击其中的“确定”按钮来使程序继续运行或进行其他操作。如果想要自动关闭消息框,如何实现?
fanjy
2023/10/23
4990
如何定时自动关闭消息框?
VBA: 自动定时关闭消息框
文章背景: 在VBA中创建弹窗对话框,可以使用MsgBox函数;但是该函数得到的消息框,必须手动关闭它。下面介绍一个未公开的Windows API函数,可以使用该函数得到一个自动定时关闭的消息框。
Exploring
2022/12/18
3K0
Flutter在Mac上搭建IOS开发环境
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
越陌度阡
2020/12/16
1.5K0
Flutter在Mac上搭建IOS开发环境
在 Debian Stretch 上设置自动升级
不少博主,出于安全、稳定的考虑,在自己的服务器上使用了 Debian 操作系统。我们知道,对于多数应用环境,特别是 LNMP 环境,绝大多数安全更新可以自行安装,本文我们将详细介绍,如何在 Debian 环境下自行下载安装最新的系统安全补丁。
Debian中国
2018/12/21
8970
iOS上架的坑
昨天在上线的时候遇到了一个坑,最后导致的结果是找了好几个小时,直接到半夜才能上线。
iOS程序应用
2022/11/21
2640
在 Windows 上搭建 MQTT 消息服务器
MQTT 已经是物联网事实上的标准通信协议。在目前市面上提供的各类开源 MQTT 服务器中,最常见的是 Linux 平台为基础,对于 Windows 平台的支持较少,即使支持也存在性能较弱、功能单一、版本兼容性等问题。
EMQ映云科技
2022/09/22
4.6K0
CSS中的float定位技术在iOS上的实现
几乎所有会WEB前端开发的同学都知道CSS中有一个float属性用于实现HTML元素的浮动定位展示。float 属性定义元素在哪个方向浮动。以往这个属性总应用于图像,使文本围绕在图像周围。不过在 CSS 中,任何元素都可以浮动,假如在一行之上只有极少的空间可供浮动元素,那么这个元素会跳至下一行,这个过程会持续到某一行拥有足够的空间为止。 浮动布局主要用于那些图文环绕以及实现一些界面不规则排列的场景,并且浮动定位技术在WEB前端开发中应用的非常普遍。
欧阳大哥2013
2018/08/22
2.2K0
CSS中的float定位技术在iOS上的实现
Django messages 消息(上)
在网页应用中,经常需要在处理完表单或其它类型的用户输入后,显示一个通知消息(也叫做“flash message”)给用户。
小团子
2019/07/18
6810
Django messages 消息(上)
Linux 上如何禁用 USB 存储设备
为了保护数据不被泄漏,我们使用软件和硬件防火墙来限制外部未经授权的访问,但是数据泄露也可能发生在内部。 为了消除这种可能性,机构会限制和监测访问互联网,同时禁用 USB 存储设备。
Debian中国
2018/12/20
10.1K0
iOS自动化探索(八)Mac上的Jenkins安装
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
周希
2019/10/15
6100
iOS自动化探索(八)Mac上的Jenkins安装
你可曾想过在iOS上跑Linux?
你可曾想过在IOS设备上运行Linux系统?或者用shell来传输文件、编写脚本,又或者使用Vi来开发代码?
FB客服
2018/12/18
3.9K0
你可曾想过在iOS上跑Linux?
在Ubuntu 20.04中禁用motd欢迎消息
本篇文章重点讲解一下在Ubuntu 20.04中禁用motd欢迎消息具体方法,有需要的小伙伴可以参考一下。
会长君
2023/04/25
2.6K0
在越狱后的iOS上运行QEMU虚拟机~
你也许不知道QEMU 但你有可能知道UTM这个iOS端的虚拟机 UTM就是以QEMU为后端的一个虚拟机 简单说 就是iOS上带GUI界面的QEMU 但是由于苹果限制 UTM并不能发挥很好的性能 所以如果你很想高速在你的设备上跑虚拟机 可以参考这篇教程 准备: 1.一台手机(必须已越狱) 2.QEMU已编译好的二进制包(由@LMY提供) 下载地址:[buttona=www.icloud.com/iclouddrive/0_DjmcFdJlCvHyBdvQwbl_0qg#qemu]点击进入[/button]
axiomxs
2021/11/26
2.4K0

相似问题

呈现表单中的List<Model>并将其发送给控制器

12

检测控制器中的视图或PartialView

20

上传文件并通过ajax - jQuery将其发送给控制器。

11

返回PartialView覆盖整个视图的控制器

23

实现MFMailComposeViewControllerDelegate并将其添加到视图控制器中

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文