我正在研究一种具有以下功能的算法
A = np.array([[10, 5, 1, 0, 0],
[6, 6, 0, 1, 0],
[4.5, 18,0, 0, 1]])
nonbasis = np.array([0, 1])
basis = np.array([2, 3, 4])
我正在执行以下操作,从上面给出的信息创建BlockMatrix。
dm2 = Matrices.dense(3, 2, A[:, nonbasis].flatten().tolist())
blocks2 = sc.parallelize([((0, 0), dm2)])
mat3 = BlockMatrix(blocks2, 3, 2)
我期待mat3如下,
mat3 = DenseMatrix([[ 10. , 5. ],
[ 6. , 6.],
[ 4.5 , 18. ]])
我得到的结果是,
mat3 = DenseMatrix([[ 10. , 6. ],
[ 5. , 4.5],
[ 6. , 18. ]])
理想情况下,如果它是3X3矩阵或nxm,其中n = m,那么我会使用 mat3 = mat3.transpose()。
如果我这样做,那么2X3矩阵变为3X2,这在我的算法中进一步产生了问题。谁能提出一个简单的解决方案。
答案 0 :(得分:0)
我选择中级IndexedRowMatrix
:
from pyspark.mllib.linalg.distributed import IndexedRowMatrix
IndexedRowMatrix(sc.parallelize(enumerate(A))).toBlockMatrix()