pyspark создание BlockMatrix из матриц разного размера - PullRequest
0 голосов
/ 13 января 2019

Я пытаюсь построить 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)

Однако я получил ошибку «Ошибка типа: невозможно преобразовать тип в кортеж субматричного блока». Есть идеи, где я не прав? Как понять этот тип blockMatrix? Спасибо!

1 Ответ

0 голосов
/ 14 января 2019

TL; DR Вы можете создать BlockMatrix из такого ввода напрямую.

BlockMatrix является обычной структурой - все блоки в BlockMatrix должны иметь одинаковый максимальный размер. Кроме того, общее количество строк и столбцов должно делиться на количество строк и столбцов в блоке соответственно.

Однако отдельные матрицы могут быть меньше блока - в этом случае данные будут занимать верхний правый угол блока.

Вам придется реструктурировать данные, чтобы они соответствовали этим критериям.

...