【发布时间】:2016-04-18 22:50:05
【问题描述】:
我正在 R 中编写一个函数来获取一个数字并对矩阵的每一行执行操作。每个矩阵应该有 50 个元素,ncol(x) 是 50。这是我正在执行的计算
function(v1,v2){
a <- sum(v1*v2)
b <- sqrt(sum(v1*v1))* sqrt(sum(v2*v2))
return(a/b)
}
这是我的数据示例:
the 0.41800 0.249680 -0.41242 0.121700 0.345270 -0.044457 -0.49688 -0.178620 -0.00066023 -0.656600 0.278430 -0.14767 -0.55677 0.14658 -0.0095095
. 0.15164 0.301770 -0.16763 0.176840 0.317190 0.339730 -0.43478 -0.310860 -0.44999000 -0.294860 0.166080 0.11963 -0.41328 -0.42353 0.5986800
of 0.70853 0.570880 -0.47160 0.180480 0.544490 0.726030 0.18157 -0.523930 0.10381000 -0.175660 0.078852 -0.36216 -0.11829 -0.83336 0.1191700
to 0.68047 -0.039263 0.30186 -0.177920 0.429620 0.032246 -0.41376 0.132280 -0.29847000 -0.085253 0.171180 0.22419 -0.10046 -0.43653 0.3341800
and 0.26818 0.143460 -0.27877 0.016257 0.113840 0.699230 -0.51332 -0.473680 -0.33075000 -0.138340 0.270200 0.30938 -0.45012 -0.41270 -0.0993200
in 0.33042 0.249950 -0.60874 0.109230 0.036372 0.151000 -0.55083 -0.074239 -0.09230700 -0.328210 0.095980 -0.82269 -0.36717 -0.67009 0.4290900`
这就是我想要写的,它非常简单:
function(w,m) {
r=matrix(nrow=nrow(m),ncol=2)
for(i in 1:(nrow(m)-1)) {
r[i,1]=cosineSim(m[w,],m[i,])
}
r=sort(r,decending=TRUE)
return (r)
}
1) 创建一个与矩阵 m 具有相同列和行的新矩阵。
2)循环通过 m-1 行。
3)每一行,使用cosineSim计算循环当前向量(行)的余弦相似度。
4)一旦循环结束,排序并返回r,这是保存结果的数组。
问题是算法似乎进入了无限循环。
我需要这个来为一个项目工作,非常感谢任何帮助。
【问题讨论】:
-
R 中的向量从 1 而不是 0 开始。
-
非常感谢,但是现在我的问题似乎是它进入了无限循环,我不完全确定它没有运行,我正在使用 20M 元素,但我有一个相当体面的笔记本电脑,它已经运行了几分钟。我将更新我的问题以反映这一点。