Spark中的稀疏矩阵

2024-09-01 08:32
文章标签 矩阵 稀疏 spark

本文主要是介绍Spark中的稀疏矩阵,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

SparkMLlib中的稀疏矩阵写法是这样的: 

Matrices.sparse(3,2,Array(0,1,3), Array(0,2,1), Array(9,6,8)) 

或者写成这样:

Matrices.sparse(3, 2, [0, 1, 3], [0, 2, 1], [9, 6, 8])

这是一个3×2的即3行2列的矩阵写法 

这个东西执行完结果是这样的:

(0,0) 9.0

(2,1) 6.0

(1,1) 8.0

也就是这样的稠密矩阵:

[9, 0]

[0, 8]

[0, 6]

 

 

通过对比写法,我们很容易理解其中的参数 ,第一个3就是行数,第二个2是列数,第二个Array是非0元素所在行数,第三个Array是非0元素数值 

 

 

很难理解的是第一个数组:Array(0,1,3)

Array(0,1,3)中的第一个元素是0,表示迭代开始,最后一个元素3则表示非0元素的总数 。关键是中间的这个值2。

把把Array(0,1,3)改成Array(0,2,3)后:

Matrix = Matrices.sparse(3,2,Array(0,2,3), Array(0,2,1), Array(9,6,8)) 

执行输出结果为:

(0,0) 9.0

(2,0) 6.0

(1,1) 8.0

也就是这样的稠密矩阵:

[9, 0]

[0, 8]

[6, 0]

 

 

可以看到6的位置变化了,从第二列变到了第一列((2,1)-->(2,0))

那么可以肯定的是,这个位置代表的是第一列的点的数量 

综合之前的分析,我们可以得到一个结论,这个Array是从0开始,1号位代表第一列元素个数,第二列代表第一列元素个数+第二列元素个数. 

可以看到,这是一个累加过程,第一列有2个,第二列有1个,第三列有3个 。

第一个数组Array(0,2,3)中,第一个0表示迭代开始,第二个元素2表示第一列有2个非0元素,第三个元素3表示第一列非0元素数与第二列非0元素数的累加和(前面列的非0元素总个数)。

 

 

如果有较多列,比如有3列,并且第三列的非0元素有一个,则第一个数组则为Array(0,2,3,4)。这里的4就是每一列非0元素个数累加(2 + 1 + 1 = 4)的结果。例如:

Matrices.sparse(3,3,[0, 3, 3, 4], [0, 2, 1, 1], [9, 6, 8,10]),这是一个3×3也就是3行3列的写法,第一个数组[0, 3, 3, 4]中,第一个元素0表示开始迭代,第二个元素3表示第一列非0元素的个数为3个,第三个元素3表示第一列和第二列的非0元素个数累加和,这表明第二列的非0元素个数为0个(因为3+0=3),第4个元素4表示第一、二、三列的非0元素个数的累加和,这说明第三列有一个非0元素(因为3+0+1=4)。Matrices.sparse(3,3,[0, 3, 3, 4], [0, 2, 1, 1], [9, 6, 8,10])

(0,0) 9.0

(2,0) 6.0

(1,0) 8.0

(1,1) 10.0

虽然一个数组[0, 3, 3, 4]和[0, 3, 4, 4]。

这和Matrices.sparse(3,3,[0, 3, 4, 4], [0, 2, 1, 1], [9, 6, 8,10])输出的结果相同,

执行结果如下:

(0,0) 9.0

(2,0) 6.0

(1,0) 8.0

(1,1) 10.0

也就是这样的稠密矩阵:

[9, 0, 0]

[8, 10,0]

[6, 0, 0]

结果相同的原因是,“先标记对角线”,之后根据每列点数不同进行调整。

 

 

Matrices.sparse(3,3,[0, 3, 4, 5], [0, 2, 1, 2, 2], [9, 6, 8,10,11])

(0,0) 9.0

(2,0) 6.0

(1,0) 8.0

(2,1) 10.0

(2,2) 11.0

也就是这样的稠密矩阵:

[9, 0, 0]

[8, 10,11]

[6, 0, 0]

 

 

结论:

Matrix = Matrices.sparse(3,2,Array(0,2,3), Array(0,2,1), Array(9,6,8)) 

(1)3,2表示行列数。

(2)Array(0,2,3),0表示开始迭代,1表示第一列非0元素个数,3表示第二列与第一列的非0元素个数累加和。

(3)Array(0,2,1)表示非0元素分别对应的行号。

(4)Array(9,6,8))表示非0元素。

 

转载:https://blog.csdn.net/moonlione/article/details/79626915

这篇关于Spark中的稀疏矩阵的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1126438

相关文章

SpringBoot操作spark处理hdfs文件的操作方法

《SpringBoot操作spark处理hdfs文件的操作方法》本文介绍了如何使用SpringBoot操作Spark处理HDFS文件,包括导入依赖、配置Spark信息、编写Controller和Ser... 目录SpringBoot操作spark处理hdfs文件1、导入依赖2、配置spark信息3、cont

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

hdu 6198 dfs枚举找规律+矩阵乘法

number number number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description We define a sequence  F : ⋅   F0=0,F1=1 ; ⋅   Fn=Fn

Spark MLlib模型训练—聚类算法 PIC(Power Iteration Clustering)

Spark MLlib模型训练—聚类算法 PIC(Power Iteration Clustering) Power Iteration Clustering (PIC) 是一种基于图的聚类算法,用于在大规模数据集上进行高效的社区检测。PIC 算法的核心思想是通过迭代图的幂运算来发现数据中的潜在簇。该算法适用于处理大规模图数据,特别是在社交网络分析、推荐系统和生物信息学等领域具有广泛应用。Spa

线性代数|机器学习-P35距离矩阵和普鲁克问题

文章目录 1. 距离矩阵2. 正交普鲁克问题3. 实例说明 1. 距离矩阵 假设有三个点 x 1 , x 2 , x 3 x_1,x_2,x_3 x1​,x2​,x3​,三个点距离如下: ∣ ∣ x 1 − x 2 ∣ ∣ 2 = 1 , ∣ ∣ x 2 − x 3 ∣ ∣ 2 = 1 , ∣ ∣ x 1 − x 3 ∣ ∣ 2 = 6 \begin{equation} ||x

【线性代数】正定矩阵,二次型函数

本文主要介绍正定矩阵,二次型函数,及其相关的解析证明过程和各个过程的可视化几何解释(深蓝色字体)。 非常喜欢清华大学张颢老师说过的一段话:如果你不能用可视化的方式看到事情的结果,那么你就很难对这个事情有认知,认知就是直觉,解析的东西可以让你理解,但未必能让你形成直觉,因为他太反直觉了。 正定矩阵 定义 给定一个大小为 n×n 的实对称矩阵 A ,若对于任意长度为 n 的非零向量 ,有 恒成

python科学计算:NumPy 线性代数与矩阵操作

1 NumPy 中的矩阵与数组 在 NumPy 中,矩阵实际上是一种特殊的二维数组,因此几乎所有数组的操作都可以应用到矩阵上。不过,矩阵运算与一般的数组运算存在一定的区别,尤其是在点积、乘法等操作中。 1.1 创建矩阵 矩阵可以通过 NumPy 的 array() 函数创建。矩阵的形状可以通过 shape 属性来访问。 import numpy as np# 创建一个 2x3 矩阵mat

稀疏自编码器tensorflow

自编码器是一种无监督机器学习算法,通过计算自编码的输出与原输入的误差,不断调节自编码器的参数,最终训练出模型。自编码器可以用于压缩输入信息,提取有用的输入特征。如,[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]四比特信息可以压缩成两位,[0,0],[1,0],[1,1],[0,1]。此时,自编码器的中间层的神经元个数为2。但是,有时中间隐藏层的神经元

【UVA】10003-Cutting Sticks(动态规划、矩阵链乘)

一道动态规划题,不过似乎可以用回溯水过去,回溯的话效率很烂的。 13988658 10003 Cutting Sticks Accepted C++ 1.882 2014-08-04 09:26:49 AC代码: #include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include

算法练习题17——leetcode54螺旋矩阵

题目描述 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。  代码 import java.util.*;class Solution {public List<Integer> spiralOrder(int[][] matrix) {// 用于存储螺旋顺序遍历的结果List<Integer> result = new ArrayList