创建m行n列的BlockMatrix,其中m不等于n而不使用' transpose'

时间:2017-07-28 00:50:27

标签: apache-spark pyspark simplex-algorithm

我正在研究一种具有以下功能的算法

  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,这在我的算法中进一步产生了问题。谁能提出一个简单的解决方案。

1 个答案:

答案 0 :(得分:0)

我选择中级IndexedRowMatrix

from pyspark.mllib.linalg.distributed import IndexedRowMatrix

IndexedRowMatrix(sc.parallelize(enumerate(A))).toBlockMatrix()