我正在尝试构建一个BlockMatrix,
+---+---+---+---+
|7.0|6.0|3.0|0.0|
|3.0|2.0|5.0|1.0|
|9.0|4.0|0.0|3.0|
+---+---+---+---+
三个子矩阵中的。
+---+---+
|7.0|6.0|
|3.0|2.0|
+---+---+
+---+---+
|9.0|4.0|
+---+---+
+---+---+
|3.0|0.0|
|5.0|1.0|
|0.0|3.0|
+---+---+
这是我的代码。
from pyspark.mllib.linalg import Matrices
from pyspark.mllib.linalg.distributed import BlockMatrix
blocks = sc.parallelize([(0, 0, Matrices.dense(2, 2, [7,3,6,2])),
(2, 0, Matrices.dense(1, 2, [9,4])),
(0, 2, Matrices.dense(3, 2, [3.0, 5.0, 0.0, 0.0, 1.0, 3.0]))
])
blockM = BlockMatrix(blocks, 2, 2)
但是我收到错误消息“ TypeError:无法将类型转换为子矩阵块元组”。知道我在哪里错吗?如何理解这种blockMatrix类型?谢谢!
答案 0 :(得分:0)
TL; DR 您可以直接从此类输入创建BlockMatrix
。
BlockMatrix
是常规结构-BlockMatrix
中的所有块都必须具有相同的最大大小。此外,行和列的总数必须分别乘以一个块中的行和列数。
但是单个矩阵可以小于该块-在这种情况下,数据将占据该块的右上角。
您必须重组数据以符合这些条件。