加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 在Spark中连接稀疏向量?

发布时间:2020-12-16 10:06:51 所属栏目:安全 来源:网络整理
导读:假设你有两个稀疏矢量.举个例子: val vec1 = Vectors.sparse(2,List(0),List(1)) // [1,0]val vec2 = Vectors.sparse(2,List(1),List(1)) // [0,1] 我想连接这两个向量,以便结果相当于: val vec3 = Vectors.sparse(4,List(0,2),List(1,1)) // [1,1] Spark
假设你有两个稀疏矢量.举个例子:

val vec1 = Vectors.sparse(2,List(0),List(1)) // [1,0]
val vec2 = Vectors.sparse(2,List(1),List(1)) // [0,1]

我想连接这两个向量,以便结果相当于:

val vec3 = Vectors.sparse(4,List(0,2),List(1,1)) // [1,1]

Spark有没有这样的方便方法呢?

解决方法

我认为你理解SparseVectors有一点问题.因此我会对它们做一点解释,第一个参数是特征的数量列|数据的维度,除了第二个参数中List的每个条目表示要素的位置,第三个List中的值表示该列的值,因此SparseVectors对位置敏感,从我的角度来看,方法不正确.

如果你更加注意你正在总结或组合两个具有相同维度的向量,因此实际结果会有所不同,第一个参数告诉我们向量只有2个维度,所以[1,0] [0,1] => [1,1]并且正确的表示将是Vectors.sparse(2,[0,1],[1,1]),而不是四维.

另一方面,如果每个向量具有两个不同的维度,并且您尝试将它们组合在一起并在更高维度的空间中表示它们,那么假设您的操作可能有效,但是SparseVector类不提供此功能,并且你必须编写一个函数来做到这一点,有点像(有点必要,但我接受建议):

def combine(v1:SparseVector,v2:SparseVector):SparseVector = {
    val size = v1.size + v2.size
    val maxIndex = v1.size
    val indices = v1.indices ++ v2.indices.map(e => e + maxIndex)
    val values = v1.values ++ v2.values
    new SparseVector(size,indices,values)
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读