假设你有两个稀疏矢量.举个例子:
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) }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。