그래픽 장치에 image
의 useRaster=TRUE
옵션을 사용하려면 일반 그리드로 변환해야하는 불규칙한 그리드가 있습니다. 불규칙한 격자를 포인트로 변환 한 후 작은 크기로이 작업을 수행 한 다음 akima의 interp
을 사용하여 포인트를 보간합니다. 그러나 이것은 더 큰 차원으로 끔찍하게 비례하므로 옵션을 찾고 있습니다.불규칙한 그리드를 일반 그리드에 보간
nx <- 5
ny <- 10
si <- list() # irregular surface
si$x <- cumsum(runif(nx) * 10) + 100
si$y <- seq(20, 50, length.out=ny)
si$z <- matrix(rnorm(nx * ny), ncol=ny)
image(si)
그리고 선형 보간 결과 :
sr_x <- seq(min(si$x), max(si$x), length.out=nx * 5)
sr_y <- si$y # this dimension is already regular
require(akima) # interpolate from points repeated off irregular grid
sr <- interp(rep(si$x, length(si$y)), rep(si$y, each=length(si$x)), si$z,
xo=sr_x, yo=sr_y)
image(sr, useRaster=TRUE)
우선, 여기에 소규모 (5 ×)에만 X-치수 불규칙 예이며
그러나 더 큰 치수의 불규칙한 그리드가 사용된다. nx <- 50; ny <- 100
) 절차가 정말 느립니다. 그 과정을 가속화 할 도서관이나 기술이 있습니까?
업데이트 및 가능한 해결책. 데이터는 불규칙한 차원에 0.5 일에서 30 일 사이의 시간 간격이 있고 두 번째 시간 축에서 365 일 간격으로 등 간격이있는 시간과 시간 (년 단위)을 나타냅니다. 간격이 불규칙한 축을 따라 매우 작기 때문에 보간은 작동하지 않습니다. 따라서 스무딩 또는 집계 방법은 더 나은 결과를 산출합니다. 미세한 불규칙한 차원 보여주는
보다 현실적인 데이터 시나리오 :
nx <- 200
ny <- 10
si <- list() # irregular surface
si$x <- cumsum(runif(nx, 0.5, 30)/365)
si$y <- 1:ny
si$z <- matrix(rnorm(nx * ny), ncol=ny)
image(si)
그리고 정말 원유 집계 의미 :
는dx <- 1/12 # 1 month spacing along x-axis
sr <- list() # regular surface
sr$x <- seq(min(si$x), max(si$y), dx) # equal-width breaks
nsrx <- length(sr$x)
sr$y <- si$y # this dimension is already regular
sr$z <- matrix(nrow=length(sr$x), ncol=length(sr$y))
# Classify irregular dimension
si_xc <- cut(si$x, sr$x, include.lowest=TRUE, labels=FALSE)
# Aggregate means from irregular to regular dimension
for(xi in seq_len(nsrx))
sr$z[xi,] <- apply(si$z[si_xc == xi, , drop=FALSE], 2, mean)
image(sr, zlim=range(si$z), useRaster=TRUE)
이 트릭을 할 것, 그리고 각 차원에 따라 100 년이되는 훨씬 더 큰 데이터 세트를 기준으로 확장합니다. 그래서 나는 나의 새로운 질문이 단순히 집계 수단을 수행하기 위해 위의 코드를 정돈하는 것이라고 생각한다.
실제 데이터 소스 란 무엇입니까? netcdf에 뭔가가 있습니까? @mdsumner 시간과 나이를 – mdsumner
조사하면 가치가 있습니다. 두 측정 기준 모두 년 단위입니다. z는 연령에 따른 확률입니다. –