Я имею в виду, есть ли функция, которая может конвертировать большие 3D-матрицы (с хорошей производительностью) в изображения-как?А именно, у меня есть пример:
mat = matrix(c(c(3,5,6,7,8,4,4,6,5,6),
c(3,4,5,7,6,4,5,4,6,6),
c(9,9,9,9,9,9,9,9,9,9)), ncol = 3, byrow = F)
Когда я plot
, это просто простая матрица 6: 5.Суть в том, чтобы получить это изображение в виде матрицы, чтобы ось x стала 1-м измерением, а ось Y - 2-м измерением, а значение стало атрибутом.Итак, как и на графике, где никакое значение (здесь 9) этой координатой будет NA.
Я пытался конвертировать, используя raster
, SpatialPoints
, as.raster
, as.Image
, однакоВсегда есть что-то для этой функции.
РЕДАКТИРОВАТЬ
Нашел очень простое решение:
xmax = max(mat[,1]); ymax = max(mat[,2])
xmin = min(mat[,1]); ymin = min(mat[,2])
dx = xmax - xmin + 1
dy = ymax - ymin + 1
mval = NULL
for (ix in (1:dx)) { #ix=1
for (iy in (1:dy)) { #iy=2
#stop()
if (any(mat[,1] == (ix+xmin-1) & mat[,2] == (iy+ymin-1))) {
mval = c(mval, mat[ix,][3])
} else {
mval = c(mval, NA)
}
}
}
mi = matrix(mval, nrow = dx, byrow = T)
rownames(mi) <- c(xmin:xmax)
colnames(mi) <- c(ymin:ymax)
Я уверен, что где-то есть лучшая реализация.