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 0Perhaps 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, DennisOn Tue, Apr 26, 2011 at 5:13 PM, Santosh <santosh2...@gmail.com> wrote:Dear RxpertsBelow 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 ______________________________________________ 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.