>>>>> Philipp A <flying-sh...@web.de> >>>>> on Wed, 14 Jan 2015 14:02:40 +0000 writes:
> Hi, > creating a matrix from two vectors a, b by multiplying each combination can > be done e.g. via > a %*% t(b) > or via > outer(a, b) # default for third argument is '*' really the best (most efficient) way would be tcrossprod(a, b) > But this yields a normal matrix. of course. Please always use small self-contained example code, here, e.g., a <- numeric(17); a[3*(1:5)] <- 10*(5:1) b <- numeric(12); b[c(2,3,7,11)] <- 1:3 > Is there an efficient way to create sparse matrices (from the Matrix > package) like that? > Right now i’m doing > a.sparse = as(a, 'sparseVector') > b.sparse = as(t(b), 'sparseMatrix') > a.sparse %*% b.sparse > but this strikes me as wasteful. not really wasteful I think. But there is a nicer and more efficient way : require(Matrix) tcrossprod(as(a, "sparseVector"), as(b, "sparseVector")) now also gives 17 x 12 sparse Matrix of class "dgCMatrix" [1,] . . . . . . . . . . . . [2,] . . . . . . . . . . . . [3,] . 50 100 . . . 150 . . . 50 . [4,] . . . . . . . . . . . . [5,] . . . . . . . . . . . . [6,] . 40 80 . . . 120 . . . 40 . [7,] . . . . . . . . . . . . [8,] . . . . . . . . . . . . [9,] . 30 60 . . . 90 . . . 30 . [10,] . . . . . . . . . . . . [11,] . . . . . . . . . . . . [12,] . 20 40 . . . 60 . . . 20 . [13,] . . . . . . . . . . . . [14,] . . . . . . . . . . . . [15,] . 10 20 . . . 30 . . . 10 . [16,] . . . . . . . . . . . . [17,] . . . . . . . . . . . . > ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.