埋める

  • 正方行列がほしい
  • 正方行列より小さい行列があって、その値を反映させて作りたい
  • 小さい行列の行平均・列平均を使って埋めてみよう
# NxN行列
# n1xn2行列 (n1,n2<N)があって、
# それ以外のセルの値が不明なときに
# n1xn2行列の値を使って、「埋める」方法

N<-10
n1<-6
n2<-8

M12<-matrix(runif(n1*n2),n1,n2)
print(M12)
T<-matrix(0,N,N)

# 確定部分を埋める
T[1:n1,1:n2]<-M12
print(T)
# M12の行と列の平均を出す
rowmean<-apply(M12,1,mean)
colmean<-apply(M12,2,mean)

# 1:n1行のn2+1:N列はM12の行平均で埋める
T2<-T
T2[1:n1,(n2+1):N]<-matrix(rep(rowmean[1:n1],N-n2),nrow=n1)
print(T2)
# 1:n2列のn1+1:N行はM12の列平均で埋める
T3<-T2
T3[(n1+1):N,1:n2]<-matrix(rep(colmean[1:n2],N-n1),ncol=n2,byrow=TRUE)
print(T3)

# T3の行平均と列平均を出す
rowmean3<-apply(T3[,1:n2],1,mean)
colmean3<-apply(T3[1:n1,],2,mean)
# 1:n1行、1:n2列の平均はTのそれから変わっていない
# n1+1:N行、n2+1:N列の平均が0でなくなった
# それは、M12の全要素の平均でもある
print(rowmean3)
print(colmean3)
mean(M12)

# その値は同じなので、n1+1:N行、n2+1:N列部分にその値を入れる

T4<-T3
T4[(n1+1):N,(n2+1):N]<-mean(M12)

rowmean4<-apply(T4,1,mean)
colmean4<-apply(T4,2,mean)

T4
print(rowmean4)
print(colmean4)