我有一个非常大的稀疏矩阵,我想发送给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 [] []。