将稀疏矩阵从R移动到Java

问题描述 投票:1回答:1

我有一个非常大的稀疏矩阵,我想发送给Java函数。我写了一个java代码来实现它,但它很慢,所以我正在寻找更好的解决方案。我从R 3阵列发送如下

TMPmat <- as(mySpMat, "TsparseMatrix")
ia=TMPmat@i
ja=TMPmat@j
x=TMPmat@x
# order by row
ro=order(ia)
myfun(.jarray(ia[ro],dispatch=T),.jarray(ja[ro],dispatch=T), .jarray(x[ro],dispatch=T)

在Java方面,我正在构建稀疏向量的ArrayList,代码如下所示:

    int[] ci=new int[nc];
    double[] vals=new double[nc];
    for(int i=0; i < ia.length && ro < nc; ro++){
        int nv=0;

        while(i < ia.length && ro == ia[i]){
            ci[nv]=ja[i];
            vals[nv]=x[i];
            nv++;
            i++;
        }

        if(nv==0){// add empty row
            newList.add(Vectors.sparse(nc,new int[]{0},new double[] {0.0}));
            continue;
        }
        int[] ciL=Arrays.copyOf(ci, nv);
        double[] vaL=Arrays.copyOf(vals, nv);
        newList.add(Vectors.sparse(nc,ciL,vaL));
    }

我需要从R发送一个包含每行索引的int [] []和包含非零元素实际值的double [] []。

java r sparse-matrix rjava
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.