R中的稀疏矩阵乘法Sparsekit Fortran

时间:2016-07-11 15:45:03

标签: r matrix fortran sparse-matrix

我试图使用Sparsekit在R中编写矩阵稀疏矩阵乘法的子程序。这是一个简单的Fortran子例程,它在Sparsekit中调用两个子例程

 subroutine mprod(nrowa,ncola,ncolb,job,ra,fa,ca,rb,fb,cb,rc,fc, cc, nnzc, iwi,err)
 call amubdg(nrowa,ncola,ncolb,fa,ca,fb,cb,ndegr,nnzc,iwi)
 call amub (nrowa,ncolb,job,ra,fa,ca,rb,fb,cb, rc,fc, cc, nnzc,iwi,err)
 return
 end

子例程amubdg获取产品每行中非零元素的数量,即它返回nnzc我需要在amub中指定以计算产品。这是我的问题,在R编译后,我正在编写的包中的函数没有问题。

z <- .Fortran("mprod",
              nrowa=as.integer(nrowa),
              ncola=as.integer(ncola),
              ncolb=as.integer(ncolb),
              job= as.integer(1),
              ra=as.double(A.csr@ra),
              fa=as.integer(A.csr@ja),
              ca=as.integer(A.csr@ia),
              rb=as.double(B.csr@ra),
              fb=as.integer(B.csr@ja),
              cb=as.integer(B.csr@ia),
              rc=double(nnzc),
              fb=integer(nnzc),
              cb=integer(A.csr@ia+1),
              ndegr=integer(nrowa),
              iwi=integer(ncola),
              err=integer(1),
              PACKAGE = "naus")

问题是以下问题,有没有办法从R调用子程序而不必指定我想要的数组的大小?这是先验的,我不知道nnzc将会是什么,这是由amubdg计算的,但要从R调用它,我需要它来指定它。任何指导将不胜感激。

0 个答案:

没有答案