scala-spark线性代数

  • DenseVector比较大小(其实也不能叫比大小吧,而应该是根据条件筛选符合的元素)
    DenseVector a(1,2,3) 与 DenseVector b(1,4,1)比较大小:
    println(a :== b) # output: BitVector(0)
    println(a :> b) # output: BitVector(2)
    println(a :< b) # output: BitVector(1)
    println(a :<= b) # output: BitVector(0,1)
    println(a :>= b) # output: BitVector(0,2)
    返回的值并不是布尔值,而是符合向量中符合大小关系的元素的下标

  • SparseVector 稀疏向量的表示
    SparseVector(n, Seq((ind1, val1), (ind2, val2), …, (ind k, val k)))
    or
    SparseVector(n, Array(ind1, ind2, …, ind k), Array(val1, val2, …, valk))
    其中n表示该向量的长度,ind i(i=1,2,…,n)为非零元素的下标,而val i 则为非零元素的值

  • 用于后续生成RDD的数据需是Seq类型,且Seq中内容是mllib.Vector类型,不能是ml.Vector类型。
    ml.Vector 转化成 mllib.Vector的方式:
    设denseVec为ml.Vector类型,则:

denseVec2 = org.apache.spark.mllib.linalg.Vectors.fromML(denseVec)

将其转化为mllib.Vector
之后用sc.parallalize(denseVec2, 2) 转化为rdd

  • breeze中向量乘法和矩阵乘法的区别
    向量a和向量b:
    a * b
    a. t * b
    a dot b
    三者等价,均做向量点乘运算
    矩阵a和矩阵b:
    a*b 均做矩阵乘法

猜你喜欢

转载自blog.csdn.net/weixin_42365868/article/details/109679830