首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将两个矩阵中的重叠求和

将两个矩阵中的重叠求和
EN

Stack Overflow用户
提问于 2016-10-31 18:34:54
回答 1查看 60关注 0票数 0

我正在尝试计算两篇科学论文之间的接近度量值。如果论文A的作者中有2位住在阿姆斯特丹,1位在纽约,而论文B的3位作者住在阿姆斯特丹,我希望结果是3+2=5。我有两个大的矩阵,其中列表示论文,行表示城市。例如:

MatrixA:

代码语言:javascript
运行
复制
                       A1      A2

美国加利福尼亚州戴维斯分校,加州分校,分校分校,4个分校分校。

洛杉矶,美国加利福尼亚州,华盛顿。*1

美国加利福尼亚州帕洛阿尔托是美国加州的一家公司,也是一家美国公司。*1

美国加利福尼亚州萨克拉门托将于2012年3月开始运营。

美国加利福尼亚州圣莫尼卡,加利福尼亚州。*2

和MatrixB:

代码语言:javascript
运行
复制
                         B1

美国加利福尼亚州戴维斯分校,加州分校,分校

洛杉矶,美国加利福尼亚州,2010年2月2日

美国加利福尼亚州帕洛阿尔托是一家位于加州的银行,该银行位于加州。

美国加利福尼亚州萨克拉门托,州1

美国加利福尼亚州圣莫尼卡,2010年2月2日

两者的交积(MatrixA %*% t(MatrixB))接近我想要的结果。这会给我A2-B1,

(0*1)+(1*2)+(1*0)+(0*1)+(2*2)=6

但我想要的是:

(0*1)+(1+2)+(1*0)+(0*1)+(2+2)=7

所以当1为0时乘法,否则就加法。有没有一个有效的(!)实现这一点的方法,使用R?

EN

回答 1

Stack Overflow用户

发布于 2016-10-31 19:12:14

您所要做的就是首先将AB矩阵中的0替换为NA,然后将它们添加到中,并使用na.rm=TRUE执行colSums

代码语言:javascript
运行
复制
A[A==0] <- NA
B[B==0] <- NA

## I'm assuming that you want to compare B to all columns of A
C <- colSums(A + rep(B,ncol(A)), na.rm=TRUE)
## A1 A2
##  8  7

数据:

代码语言:javascript
运行
复制
A <- structure(c(4, 0, 0, 2, 0, 0, 1, 1, 0, 2), .Dim = c(5L, 
2L), .Dimnames = list(NULL, c("A1", "A2")))
##     A1 A2
##[1,]  4  0
##[2,]  0  1
##[3,]  0  1
##[4,]  2  0
##[5,]  0  2

B <- structure(c(1, 2, 0, 1, 2), .Dim = c(5L, 1L), .Dimnames = list(
    NULL, "B1"))
##     B1
##[1,]  1
##[2,]  2
##[3,]  0
##[4,]  1
##[5,]  2
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40340440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档