Thanks, David! That is another interesting perspective to (sub/super) diagonal story! For now I was looking only at block sizes of lower triangle submatrices as Dennis suggested.
Regards, Santosh On Wed, Apr 27, 2011 at 5:57 AM, David Winsemius <dwinsem...@comcast.net>wrote: > > On Apr 27, 2011, at 12:07 AM, Dennis Murphy wrote: > > Hi: >> >> Maybe this can help get you started. Reading your data into a matrix m, >> >> m <- structure(c(1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, >> 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, >> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, >> 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, >> 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, >> 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), .Dim = c(11L, >> 11L)) >> >> rowSums(m) + colSums(m) - 1 >> [1] 2 2 1 -1 3 3 3 3 3 3 -1 >> >> The pair of 2's => a 2 x 2 block, 1 => a 1 x 1 matrix with value 1, -1 >> => a 1 x 1 matrix with entry 0, a triplet of 3's => a 3 x 3 subblock, >> etc. You should be able to figure out the rows and columns for each >> submatrix from the indices of the vector above; the values provide an >> indication of matrix size as well as position. >> >> > If we are in the stage of providing potentially useful but incomplete > ideas, this would be my notion. Use the row and col functions with "[" to > locate non-zero elements in the diagonal and subdiagonal: > > Diagonal: (My matrix was named `mm`) > > mm[row(mm)==col(mm)] > [1] 1 1 1 0 1 1 1 1 1 1 0 > First subdiagonal: > > mm[row(mm)==col(mm)+1] > > [1] 0 0 0 0 0 0 0 0 0 0 > First superdiagonal: > > mm[row(mm)==col(mm)-1] > [1] 1 0 0 0 1 1 0 1 1 0 > > Perhaps a combination of the two? It seems as though the rowSums/colSums > approach might be insensitive to whether triangular blocks were sub or super > diagonal: > > > rowSums(mm) + colSums(mm) - 1 > > [1] 2 2 1 -1 3 3 3 3 3 3 -1 > > mm[1,2]<-0 > > mm[2,1]<-1 > > rowSums(mm) + colSums(mm) - 1 > > [1] 2 2 1 -1 3 3 3 3 3 3 -1 > > HTH, >> Dennis >> >> >> >> On Tue, Apr 26, 2011 at 5:13 PM, Santosh <santosh2...@gmail.com> wrote: >> >>> Dear Rxperts >>> >>> Below is a small vector of values of zeros and non-zeros... was wondering >>> if >>> there is an efficient way to get the block sizes of submatrices of a big >>> matrix similar to the one shown below? diagonal elements can be zero too. >>> Rows with only a diagonal element may be considered as a unit block size. >>> >>> c(1,0,0,0,0,0,0,0,0,0,0, >>> 1,1,0,0,0,0,0,0,0,0,0, >>> 0,0,1,0,0,0,0,0,0,0,0, >>> 0,0,0,0,0,0,0,0,0,0,0, >>> 0,0,0,0,1,0,0,0,0,0,0, >>> 0,0,0,0,1,1,0,0,0,0,0, >>> 0,0,0,0,1,1,1,0,0,0,0, >>> 0,0,0,0,0,0,0,1,0,0,0, >>> 0,0,0,0,0,0,0,1,1,0,0, >>> 0,0,0,0,0,0,0,1,1,1,0, >>> 0,0,0,0,0,0,0,0,0,0,0) >>> >>> Thanks much! >>> Santosh >>> >>> [[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. >> > > David Winsemius, MD > West Hartford, CT > > [[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.