Re: [R] efficient matrix element comparison
Try this: Matrix(diag(duplicated(matchM)), sparse = TRUE) On Sun, Aug 8, 2010 at 9:43 PM, david h shanabrook wrote: > It is a simple problem in that I simply want to convert the For loop to a > more efficient method. It simply loops through a large vector checking if > the numeric element is not equal to the index of that element. The > following example demonstrates a simplified example: > > > rows <- 10 > > collusionM <- Matrix(0,10,10,sparse=TRUE) > > matchM <- matrix(c(1,2,3,4,4,6,7,9,9,10)) > > > > for (j in 1:rows) if (j != matchM[j]) collusionM[j,matchM[j]] <- > collusionM[j,matchM[j]]+1 > > collusionM > 10 x 10 sparse Matrix of class "dgCMatrix" > > [1,] . . . . . . . . . . > [2,] . . . . . . . . . . > [3,] . . . . . . . . . . > [4,] . . . . . . . . . . > [5,] . . . 1 . . . . . . > [6,] . . . . . . . . . . > [7,] . . . . . . . . . . > [8,] . . . . . . . . 1 . > [9,] . . . . . . . . . . > [10,] . . . . . . . . . . > > Again, this works, I just need the for loop to be more efficient as in my > application rows=37000, and I need to do this 100 times. > > Thanks. >[[alternative HTML version deleted]] > > __ > R-help@r-project.org mailing list > 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. > -- Henrique Dallazuanna Curitiba-Paraná-Brasil 25° 25' 40" S 49° 16' 22" O [[alternative HTML version deleted]] __ R-help@r-project.org mailing list 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.
Re: [R] efficient matrix element comparison
How about a <- which(row(matchM)!=matchM) b <- matchM[a] diag(collusionM[a,b]) <-1 Nikhil Kaza Asst. Professor, City and Regional Planning University of North Carolina nikhil.l...@gmail.com On Aug 8, 2010, at 8:43 PM, david h shanabrook wrote: It is a simple problem in that I simply want to convert the For loop to a more efficient method. It simply loops through a large vector checking if the numeric element is not equal to the index of that element. The following example demonstrates a simplified example: rows <- 10 collusionM <- Matrix(0,10,10,sparse=TRUE) matchM <- matrix(c(1,2,3,4,4,6,7,9,9,10)) for (j in 1:rows) if (j != matchM[j]) collusionM[j,matchM[j]] <- collusionM[j,matchM[j]]+1 collusionM 10 x 10 sparse Matrix of class "dgCMatrix" [1,] . . . . . . . . . . [2,] . . . . . . . . . . [3,] . . . . . . . . . . [4,] . . . . . . . . . . [5,] . . . 1 . . . . . . [6,] . . . . . . . . . . [7,] . . . . . . . . . . [8,] . . . . . . . . 1 . [9,] . . . . . . . . . . [10,] . . . . . . . . . . Again, this works, I just need the for loop to be more efficient as in my application rows=37000, and I need to do this 100 times. Thanks. [[alternative HTML version deleted]] __ R-help@r-project.org mailing list 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. __ R-help@r-project.org mailing list 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.