Algorithm 理解火花相关算法
我正在阅读Spark correlation算法的源代码,在阅读代码时,我无法理解这段特殊的代码 这来自以下文件:org/apache/spark/mllib/linalg/BLAS.scalaAlgorithm 理解火花相关算法,algorithm,scala,apache-spark,cross-correlation,pearson-correlation,Algorithm,Scala,Apache Spark,Cross Correlation,Pearson Correlation,我正在阅读Spark correlation算法的源代码,在阅读代码时,我无法理解这段特殊的代码 这来自以下文件:org/apache/spark/mllib/linalg/BLAS.scala def spr(alpha: Double, v: Vector, U: Array[Double]): Unit = { val n = v.size v match { case DenseVector(values) => NativeBLAS.
def spr(alpha: Double, v: Vector, U: Array[Double]): Unit = {
val n = v.size
v match {
case DenseVector(values) =>
NativeBLAS.dspr("U", n, alpha, values, 1, U)
case SparseVector(size, indices, values) =>
val nnz = indices.length
var colStartIdx = 0
var prevCol = 0
var col = 0
var j = 0
var i = 0
var av = 0.0
while (j < nnz) {
col = indices(j)
// Skip empty columns.
colStartIdx += (col - prevCol) * (col + prevCol + 1) / 2
av = alpha * values(j)
i = 0
while (i <= j) {
U(colStartIdx + indices(i)) += av * values(i)
i += 1
}
j += 1
prevCol = col
}
}
}
defspr(alpha:Double,v:Vector,U:Array[Double]):单位={
val n=v.尺寸
v匹配{
案例密度系数(值)=>
NativeBLAS.dspr(“U”,n,alpha,值,1,U)
大小写分隔符(大小、索引、值)=>
val nnz=索引长度
var colStartIdx=0
var-prevCol=0
var col=0
var j=0
变量i=0
var av=0.0
而(j
相关性定义如下:
最终目标是了解火花相关算法
更新1:相关文件阅读评论:至于其余的,我想我已经在聊天室里解释了很久了是的,非常感谢你的解释,但我想知道这个spr算法,以及它的任何参考资料。对不起,我不再回答你的问题了。好的。如果我说了什么错的话,请原谅。无论如何,谢谢你解释相关的事情。我将在周三会见我的教授。不必抱歉。只是你的问题ns非常广泛,我想把时间浪费在长时间的交流上。老实说,在这个网站上解释这么多代码是不可能的。
def computeGramianMatrix(): Matrix = {
val n = numCols().toInt
checkNumColumns(n)
// Computes n*(n+1)/2, avoiding overflow in the multiplication.
// This succeeds when n <= 65535, which is checked above
val nt = if (n % 2 == 0) ((n / 2) * (n + 1)) else (n * ((n + 1) / 2))
// Compute the upper triangular part of the gram matrix.
val GU = rows.treeAggregate(new BDV[Double](nt))(
seqOp = (U, v) => {
BLAS.spr(1.0, v, U.data)
U
}, combOp = (U1, U2) => U1 += U2)
RowMatrix.triuToFull(n, GU.data)
}