Re: [R] sub-matrix block size

From: David Winsemius <dwinsemius_at_comcast.net>
Date: Wed, 27 Apr 2011 08:57:33 -0400

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 <santosh2005_at_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_at_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_at_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_at_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. Received on Wed 27 Apr 2011 - 13:05:08 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Wed 27 Apr 2011 - 14:00:33 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.

list of date sections of archive