周辺度数条件の行列を作る

  • n次元分割表でn軸のr_i;i=1,2,...,n個のカテゴリ別に識別する、長さ\pi_{i=1}^n r_iのベクトルを並べた行列をつくる
> A
      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
 [1,]    1    0    1    0    1    0    1    0    1     0     1     0
 [2,]    0    1    0    1    0    1    0    1    0     1     0     1
 [3,]    1    1    0    0    0    0    1    1    0     0     0     0
 [4,]    0    0    1    1    0    0    0    0    1     1     0     0
 [5,]    0    0    0    0    1    1    0    0    0     0     1     1
 [6,]    1    1    1    1    1    1    0    0    0     0     0     0
 [7,]    0    0    0    0    0    0    1    1    1     1     1     1
 [8,]    1    1    1    1    1    1    1    1    1     1     1     1
 [9,]    0    0    0    0    0    0    0    0    0     0     0     0
      [,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22]
 [1,]     1     0     1     0     1     0     1     0     1     0
 [2,]     0     1     0     1     0     1     0     1     0     1
 [3,]     1     1     0     0     0     0     1     1     0     0
 [4,]     0     0     1     1     0     0     0     0     1     1
 [5,]     0     0     0     0     1     1     0     0     0     0
 [6,]     1     1     1     1     1     1     0     0     0     0
 [7,]     0     0     0     0     0     0     1     1     1     1
 [8,]     0     0     0     0     0     0     0     0     0     0
 [9,]     1     1     1     1     1     1     1     1     1     1
      [,23] [,24]
 [1,]     1     0
 [2,]     0     1
 [3,]     0     0
 [4,]     0     0
 [5,]     1     1
 [6,]     0     0
 [7,]     1     1
 [8,]     0     0
 [9,]     1     1
n<-4
rs<-sample(2:4,n,replace=TRUE)
R<-prod(rs)
Arr<-array(0,rs)
address<-which(Arr==0,arr.ind=TRUE)
A<-matrix(0,sum(rs),R)
counter<-1
for(i in 1:n){
	for(j in 1:rs[i]){
		these<-which(address[,i]==j)
		A[counter,these]<-1
		counter<-counter+1
	}
}
A