arrayでn進法、slice.index()のこと

  • こちらでarrayを使って、3次元格子の時間経過を3次元プロットしている。slice.index()関数を使って3空間軸+1時間軸の4次元データから、3空間軸の座標を取り出している
  • なるほど、arrayは行列の多次元化したものであって、格子座標が取り出せる
  • これを利用して、n1進法とn2進法との表現のやりとりをする方法を次のように考えてみる
# n1,n2n3,が進法、k1,k2,k3はその桁数
n1<-2
k1<-7
n2<-4
k2<-4
n3<-10
k3<-3
# n1進法、n2進法で、第i番目の数値が、どのように表されるかはarrayの格納場所として定まる
a1<-array(1:(n1^k1),rep(n1,k1))
a2<-array(1:(n2^k2),rep(n2,k2))
a3<-array(1:(n3^k3),rep(n3,k3))
# 1から数えて100番目の数値dを考える
# "100"というのは、100番目の数値dを10進法で表した方法にすぎない
# ただし、ここでは、「x,y,z」と表されているとき、それは、通常のni進法では、「z,y,x」と表されていることに注意する
# また、ni進法では、0,1,2,...,(ni-1)というni個の数値で表すが、0はniで表されていることに注意。
# したがって、10進法での100は、1,10,10と表されており、その順序が逆で10,10,1と表す
d<-100
# n1,n2進法での表記法を示す
which(a1==d,arr.ind=TRUE)
which(a2==d,arr.ind=TRUE)
which(a3==d,arr.ind=TRUE)
a1[2,2,1,1,1,2,2]
a2[4,1,3,2]
a3[10,10,1] # 10進法では100の位の順序を逆転させて、001、そのそれぞれの値に1を加えて,
which(a2==a1[2,2,1,1,1,2,2],arr.ind=TRUE)
which(a1==a2[4,1,3,2],arr.ind=TRUE)
> which(a1==d,arr.ind=TRUE)
     dim1 dim2 dim3 dim4 dim5 dim6 dim7
[1,]    2    2    1    1    1    2    2
> which(a2==d,arr.ind=TRUE)
     dim1 dim2 dim3 dim4
[1,]    4    1    3    2
> which(a3==d,arr.ind=TRUE)
     dim1 dim2 dim3
[1,]   10   10    1
> a1[2,2,1,1,1,2,2]
[1] 100
> a2[4,1,3,2]
[1] 100
> a3[10,10,1] # 10進法では100の位の順序を逆転させて、001、そのそれぞれの値に1を加えて,
[1] 100
> which(a2==a1[2,2,1,1,1,2,2],arr.ind=TRUE)
     dim1 dim2 dim3 dim4
[1,]    4    1    3    2
> which(a1==a2[4,1,3,2],arr.ind=TRUE)
     dim1 dim2 dim3 dim4 dim5 dim6 dim7
[1,]    2    2    1    1    1    2    2