在JMatIO中使用MLSparse

时间:2014-05-15 00:49:47

标签: java matlab sparse-matrix

我们尝试使用JMatio在JMatIO中输出一组Mahout SequentialAccessSparseVectors作为单个MLSparse(矩阵),供MatLab稍后使用。

免责声明:我认识Java,但我是MatLab的新手。

当我们创建一个MLSparse并用我们的向量填充它时,调用MLSparse.contentToString()例程会按照我们的预期输出数据。但是,当它被MatFileWriter写入文件时,它显示其中只有一个向量:

int nzRows     = vectors.get(0).getNumNonZeroElements();
int sampleCols = vectors.size();           // MatLab is by-column, so on column/vector
int sampleRows = vectors.get(0).size();    // Rows are the Entries in the vectors
MLSparse matLabMatrix = new MLSparse( "vectors", new int[]{sampleRows, sampleCols}, 0, nzRows * sampleCols );    
mergeSparse( vectors, matLabMatrix );        

mergeSparse是:

private static void mergeSparse( ArrayList<SequentialAccessSparseVector> vectors, MLSparse destSparse )
{
    int sampleNumber = 0;
    for ( SequentialAccessSparseVector sasv : vectors )   
    { 
        Iterator<Vector.Element> iterator = sasv.iterateNonZero();        
        while ( iterator.hasNext() ) 
        {
            Vector.Element vectorElement = iterator.next();
            int    index = vectorElement.index();
            double value = vectorElement.get();
            destSparse.setReal( value, index, sampleNumber );
        }   
        ++sampleNumber;
    }
}

作为一个人为的例子,如果我们的稀疏向量是:{1,2,3} {4,5,6} 调用.contentToString()会产生:

vectors =
(0, 0) 1
(1, 0) 2
(2, 0) 3
(0, 1) 4
(1, 1) 5
(2, 1) 6

但是。 。 。磁盘上的文件读作:

(0, 0) 1
(1, 0) 2
(2, 0) 3

任何指针都会非常感激。

0 个答案:

没有答案