如何在 R 中将 2D 矩阵改回 3D 数组
How to change 2D matrix back to 3D array in R
我有一个 3D 数组,其中 lon(1:144)(范围 0-360,步长为 2.5),lat(1:29)(20-90,步长为 2.5)和一个时间变量(1:180)(30年,每年6个月)。
lon <- seq(from = 0, to = 360, by = 2.5)
lat <- seq(from = 17.5, to = 90, by = 2.5)
time <- c(1:180)
var <- c(28532:31298)
我通过乘以 lon*lat:
将我的数据转换为二维矩阵
new2Ddata <- matrix(oldmatrix, prod(dim(oldmatrix)[1:2]), dim(oldmatrix)[3])
然后我计算了svd:
svd.result <- svd(new2Ddata)
我得到了包含三个分量的 svd.result 并使用分量 U [1:4176 (lon*lat), 1:180 (variable)]
创建了一个新的数据框
modes <- as.data.frame(svd.result$u)
我必须再次将其转换为 3D(经度、纬度、时间和随时间变化)。我试过了:
dim(modes) <- c(144,29,180)
我在 dim(modes) <- c(144, 29, 180) 中得到一个 error:Error :
dims [产品 751680] 与对象 [180] 的长度不匹配
关于如何做的任何想法?感谢您的帮助!
问题出在这行代码modes <- as.data.frame(svd.result$u)
。为了将结果转换回 3D 数组,您需要 modes
实际上是矩阵而不是数据框。如果您只需将代码更改为 modes <- svd.result$u
.
,您的代码应该可以工作
我有一个 3D 数组,其中 lon(1:144)(范围 0-360,步长为 2.5),lat(1:29)(20-90,步长为 2.5)和一个时间变量(1:180)(30年,每年6个月)。
lon <- seq(from = 0, to = 360, by = 2.5)
lat <- seq(from = 17.5, to = 90, by = 2.5)
time <- c(1:180)
var <- c(28532:31298)
我通过乘以 lon*lat:
将我的数据转换为二维矩阵new2Ddata <- matrix(oldmatrix, prod(dim(oldmatrix)[1:2]), dim(oldmatrix)[3])
然后我计算了svd:
svd.result <- svd(new2Ddata)
我得到了包含三个分量的 svd.result 并使用分量 U [1:4176 (lon*lat), 1:180 (variable)]
创建了一个新的数据框modes <- as.data.frame(svd.result$u)
我必须再次将其转换为 3D(经度、纬度、时间和随时间变化)。我试过了:
dim(modes) <- c(144,29,180)
我在 dim(modes) <- c(144, 29, 180) 中得到一个 error:Error : dims [产品 751680] 与对象 [180] 的长度不匹配 关于如何做的任何想法?感谢您的帮助!
问题出在这行代码modes <- as.data.frame(svd.result$u)
。为了将结果转换回 3D 数组,您需要 modes
实际上是矩阵而不是数据框。如果您只需将代码更改为 modes <- svd.result$u
.