如何在 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.

,您的代码应该可以工作