-
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 均做矩阵乘法