Re: [R] Simplifying matrix computation

2014-01-29 Thread Carlo Giovanni Camarda
Dear David, and R-users,

thanks for the response. I'll do my best to describe the context.

My data consists in two matrices, D and T. The former provides simple 
values, the latter is a Boolean matrix. The number of rows in D is equal 
to the number of columns in T.

My aim is to construct a larger matrix which is made up of sum(T) 
diagonal matrices constructed from the rows of D, and placed according 
to a structure given by a transformation of T.

Whereas the positions of the columns in which T is equal to 1 informs 
about the placement of the diagonal matrices, the positions of the rows 
in which T is equal to 1 informs about which row to take from D in order 
to create these diagonal matrices.
In the code below (corrected in the last line with respect to the 
previous version, sorry), I first created the matrices D and T. Then I 
built a 0/1 matrix (M0) that presents the structure of the final 
block-matrix made up of diagonal matrices, and, by Kronecker product, a 
matrix with the final 0/1 structure is constructed, M.
Using the rows in which T is equal to 1, I select the values from D and 
place in the matrix M, where such matrix is equal to 1.

It's a long explanation and I could not find a better way to program 
(and explain) it.

Thanks for you help,
Giancarlo


## data in matrices
D - matrix(1:15, 3, 5)
T - matrix(0, 3, 3)
T[c(2,4,6,8)] - 1

## the col of T equal to 1 gives the position
wr - which(T==1, arr.ind=TRUE)[,2]
## we aim to sum(T) diagonal matrices
wc - 1:sum(T)
## structure: how to place the diagonal matrices
M0 - matrix(0, nrow(T), sum(T))
M0[cbind(wr,wc)] - 1

## number of columns
m - ncol(D)
## final 0/1 matrix
M - kronecker(M0, diag(m))

## the row of T equal to 1 gives which rows to take from D
pos - which(T==1, arr.ind=TRUE)[,1]
## filling up with data
M[M!=0] - t(D[pos,])


On 29/01/2014 01:49, David Winsemius wrote:
 On Jan 27, 2014, at 8:04 AM, Carlo Giovanni Camarda wrote:

 Dear R-users,

 I would like to know whether you know some trick for skipping some of
 the steps in the example below (especially the last step in a way that
 would make easier to be written succinctly in a text).

 I could try to explain in words the whole process, but I'm sure the code
 below would be clearer.
 After looking at the code and output, I must disagree. The lack of any 
 response from the rest of the readership suggests to me that I am not the 
 only one who thinks a natural language description of the context and goals 
 for this effort would help.

 Thanks in advance for your help,
 Giancarlo


 ## data in matrices
 D - matrix(1:15, 3, 5)
 T - matrix(0, 3, 3)
 T[c(2,4,6,8)] - 1

 ## how to place the diag matrices of each row
 M0 - matrix(0, nrow(T), sum(T))
 wr - which(T==1, arr.ind=TRUE)[,2]
 wc - 1:ncol(M0)
 M0[cbind(wr,wc)] - 1

 ## number of columns
 m - ncol(D)
 ## non-zero positions
 M - kronecker(M0, diag(m))
 ## which rows to take
 pos - which(T==1, arr.ind=TRUE)[,1]
 ## filling up with data
 M[M!=0] - t(D[wr,])

  [[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.
 David Winsemius
 Alameda, CA, USA



[[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] Simplifying matrix computation

2014-01-28 Thread David Winsemius

On Jan 27, 2014, at 8:04 AM, Carlo Giovanni Camarda wrote:

 Dear R-users,
 
 I would like to know whether you know some trick for skipping some of 
 the steps in the example below (especially the last step in a way that 
 would make easier to be written succinctly in a text).
 
 I could try to explain in words the whole process, but I'm sure the code 
 below would be clearer.

After looking at the code and output, I must disagree. The lack of any response 
from the rest of the readership suggests to me that I am not the only one who 
thinks a natural language description of the context and goals for this effort 
would help.

 
 Thanks in advance for your help,
 Giancarlo
 
 
 ## data in matrices
 D - matrix(1:15, 3, 5)
 T - matrix(0, 3, 3)
 T[c(2,4,6,8)] - 1
 
 ## how to place the diag matrices of each row
 M0 - matrix(0, nrow(T), sum(T))
 wr - which(T==1, arr.ind=TRUE)[,2]
 wc - 1:ncol(M0)
 M0[cbind(wr,wc)] - 1
 
 ## number of columns
 m - ncol(D)
 ## non-zero positions
 M - kronecker(M0, diag(m))
 ## which rows to take
 pos - which(T==1, arr.ind=TRUE)[,1]
 ## filling up with data
 M[M!=0] - t(D[wr,])
 
   [[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.

David Winsemius
Alameda, CA, USA

__
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] Simplifying matrix computation

2014-01-27 Thread Carlo Giovanni Camarda
Dear R-users,

I would like to know whether you know some trick for skipping some of 
the steps in the example below (especially the last step in a way that 
would make easier to be written succinctly in a text).

I could try to explain in words the whole process, but I'm sure the code 
below would be clearer.

Thanks in advance for your help,
Giancarlo


## data in matrices
D - matrix(1:15, 3, 5)
T - matrix(0, 3, 3)
T[c(2,4,6,8)] - 1

## how to place the diag matrices of each row
M0 - matrix(0, nrow(T), sum(T))
wr - which(T==1, arr.ind=TRUE)[,2]
wc - 1:ncol(M0)
M0[cbind(wr,wc)] - 1

## number of columns
m - ncol(D)
## non-zero positions
M - kronecker(M0, diag(m))
## which rows to take
pos - which(T==1, arr.ind=TRUE)[,1]
## filling up with data
M[M!=0] - t(D[wr,])

[[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.