python - 如何使用 Spark 创建稀疏 CSCMatrix?

标签 python apache-spark matrix pyspark

Spark 的文档,用于创建 pyspark.ml.linalg.SparseMatrix 说:

Column-major sparse matrix. The entry values are stored in Compressed
Sparse Column (CSC) format. For example, the following matrix

   1.0 0.0 4.0 
   0.0 3.0 5.0
   2.0 0.0 6.0   

is stored as values: [1.0, 2.0, 3.0, 4.0, 5.0, 6.0], 
rowIndices=[0, 2, 1, 0, 1, 2], 
colPointers=[0, 2, 3, 6]

您能解释一下我们如何导出 colPointers 吗?它说它们代表对应于新列开头的索引,但我仍然无法理解它。

最佳答案

在矩阵中使用字符而不是 float 使阅读更容易:

a 0 d 
0 c e
b 0 f 

存储为

values: [a, b, c, d, e, f]
rowIndices: [0, 2, 1, 0, 1, 2]
colPointers: [0, 2, 3, 6]
  • values 是矩阵中的非空值
  • rowIndicesvalues 中的值映射到它们在矩阵中的行索引,即 a 存储在第 0 行; b 存储在第 2 行,c 存储在第 1 行......所以 values
  • 中的每个值都有一个行索引>
  • colPointersvalues 分成列。所以我们可以将 values 列表表示为 [|a, b,|三,| d, e, f|],使用 | 作为列表 values 中索引 0、2、3、6 的拆分器:
    • ab 属于第一列
    • c属于第二列
    • d, e anf f 属于第三列
    • 请注意 ColPointers 始终以 0 开头并以一个数字结束,该数字是 values 的长度(此处为 6)

关于python - 如何使用 Spark 创建稀疏 CSCMatrix?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44825193/

相关文章:

python - 对对应列表进行排序

python - 如何在 python 中打印 3x3 数组?

python - Pandas - 替换数据中的%符号并将其放回去

scala - 我在Scala中运行Spark WordCount时在Eclipse中出现错误

algorithm - 矩阵链乘法可以有多个答案吗?

python - 如何使用 python 更快地复制和粘贴大型 Excel 文件(27MB)?

scala - 修改了spark中的countByKey

python - 如何避免一个 Spark Streaming 窗口阻塞另一个窗口同时运行一些 native Python 代码

matlab - 从矩阵中删除行

arrays - 与python结果不同的矩阵点积