長方形から、多次元直方体へ

  • 前の記事で、要素間の関係定義を与えるにあたって、要素を「長方形」に納めることでAssociation Schemeを満足させた
  • 行で関係を決め、決まらなかったら、列で決め、それでも決まらなかったら、「残り」という論理だった
  • 「行」「列」が1つずつでなければならない処理の組み方になっていないので、多次元にして、第1軸→第2軸→第3軸→…最終軸→残り、という処理でもよさそう
  • ということで、そのような組み方にしたのが以下

numdim<-3
nnns<-sample(3:5,numdim,replace=TRUE)

numelem<-prod(nnns)

numelem
Ma<-array(1:numelem,nnns)
Ma
v<-numelem
A<-matrix(0,v,v)
for(i in 1:v){
	tmp1<-which(Ma==i,arr.ind=TRUE)
	for(j in 1:v){
		tmp2<-which(Ma==j,arr.ind=TRUE)
		if(i==j){
			A[i,j]<-0
		}else{
			difftmp<-tmp1-tmp2
			zeros<-which(difftmp==0)
			if(length(zeros)==0){
				A[i,j]<-length(difftmp)+1
			}else{
				A[i,j]<-min(zeros)
			}
		}
	}
}
# 関係が同じ要素を抜き出して、(0,1)でできた行列のリストにする
As<-list()
for(i in 0:n){
	As[[i+1]]<-matrix(0,v,v)
	As[[i+1]][which(A==i,arr.ind=TRUE)]<-1
}
#As

# その和は全要素が1の行列
Asum<-matrix(0,v,v)
for(i in 1:(3+1)){
	Asum<-Asum+As[[i]]
}
Asum

# AiAj = sum cijj Ak =AjAiだという
for(i in 0:(3-1)){
	for(j in (i+1):3){
		print(As[[i+1]]%*%As[[j+1]])
	}
}
J<-matrix(1,v,v)

As[[2]]%*%J
J%*%As[[2]]


A

t<-seq(from=0,to=1,length=v+1)*2*pi
t<-t[-length(t)]

plot(cos(t),sin(t))

for(i in 1:length(As)){
	for(j in 1:length(As[[i]][,1])){
		for(k in 1:length(As[[i]][1,])){
			if(As[[i]][j,k]==1){
				segments(cos(t[j]),sin(t[j]),cos(t[k]),sin(t[k]),col=i,lwd=1)
			}
			
		}
	}
}