6

R に 3 行 5 列の行列があるとします。

4  5  5  6  8
3  4  4  5  6
2  3  3  3  4

これらの値の間を補間して、15 x 25 のサイズの行列を作成したいと思います。また、補間が線形か、ガウス型かなどを指定したいと思います。どうすればよいですか?

たとえば、このような小さな行列がある場合

2 3
1 3

3 x 3にしたい場合は、次のようになります

  2    2.5   3
  1.5  2.2   3
  1    2     3 
4

2 に答える 2

0

かなり前に、補間関数の定義に手をつけたことがないことを除いて、私は同様のおもちゃを書きました。もありraster::disaggregateます。

zexpand<-function(inarray, fact=2, interp=FALSE,  ...)  {
# do same analysis of fact to allow one or two values, fact >=1 required, etc.
fact<-as.integer(round(fact))
switch(as.character(length(fact)),
            '1' = xfact<-yfact<-fact,
            '2'= {xfact<-fact[1]; yfact<-fact[2]},
            {xfact<-fact[1]; yfact<-fact[2];warning(' fact is too long. First two values used.')})
if (xfact < 1) { stop('fact[1] must be > 0') } 
if (yfact < 1) { stop('fact[2] must be > 0') }
bigtmp <- matrix(rep(t(inarray), each=xfact), nrow(inarray), ncol(inarray)*xfact, byr=T)  #does column expansion
bigx <- t(matrix(rep((bigtmp),each=yfact),ncol(bigtmp),nrow(bigtmp)*yfact,byr=T))
# the interpolation would go here. Or use interp.loess on output (won't
# handle complex data). Also, look at fields::Tps which probably does
# a much better job anyway.  Just do separately on Re and Im data
return(invisible(bigx))
}
于 2013-04-16T12:07:06.397 に答える