[R] writing spdiags function for R
Ben Bolker
bbolker at gmail.com
Fri Apr 13 21:22:16 CEST 2012
Moreno I. Coco <M.I.Coco <at> sms.ed.ac.uk> writes:
[snip snip snip]
>
> So, I have written my own spdiags function (below); following
> also a suggestion in an old, and perhaps unique post, about
> this issue.
>
> It works only for square matrices (that's my need), however I
> have a couple of issues, mainly related to computational
> efficiency:
>
> 1) if I use it with a sparseMatrix, it throws a tedious warning
> "<sparse>[ <logic> ] : .M.sub.i.logical() maybe inefficient";
> can I suppress this warning somehow, this is slowing the computation
> very radically;
quick answer: use suppressMessages()
>
> 2) I can go around this problem by translating a sparseMatrix back
> into a logical matrix before I run spdiags on it. However, the loop
> gets very slow for large matrices (e.g., 2000x2000), which is the
> kind of matrices I have to handle. If you look in the code,
> I have placed a system.time() where the code is slowing down, and
> it takes about:
>
I'm not quite sure how to do it, but I think you should look
at the ?band function in Matrix. In combination with diag() of a
suitably truncated matrix, you should be able to extract bands
of sparse matrices efficiently ...
More information about the R-help
mailing list