在R数组中降维

7

问题

假设 K ≥ 2,d ≥ 3。我有一个三维数组,其维度为 c(K,K-1,d)

例如,如果 K = d = 3,那么

A <- array(1:18,dim = c(3,2,3))

现在我想通过沿着第一维选择一个索引来获取一个 (K-1) x d 的矩阵,例如:

M <- A[1,,]

如果 K > 2,它可以正常工作。但是如果 K = 2,则第二个维度为 1,R 的默认行为是将其删除。因此,以下代码将返回一个长度为 d 的向量,而不是矩阵。

K <- 2
d <- 3
A <- array(1:6,dim = c(K,K-1,d))
A[1,,]

我需要一个矩阵,因为我想进行矩阵乘积运算。

我尝试过的方法

可以通过使用drop选项来强制R不丢弃维度。

M <- A[1,,,drop = FALSE]
dim(M)

但是这会返回一个三维数组,因为第一维也没有被删除。
我还尝试使用as.matrix
M <- as.matrix(A[1,,])
dim(M)

这会返回一个 d x (K-1) 的矩阵,而不是期望的 (K-1) x d 矩阵。虽然可以使用转置 t(),但一旦 K>2,它就无法运作了。有没有一种有效的方法可以让这个函数在任何 K 值下都能正常运行?


是的,看起来它正在工作,谢谢! - Augustin
1个回答

4
创建一个数组并明确指定所需的维度:
array(A[1, , ], dim=c(K-1, d)) 

至少对我来说,“array”有点误导人。我认为matrix(A[1,,], nrow=K-1, ncol=d)也可以工作。另外,res <- A[1,,]; dim(res) <- c(K-1, d) - Mike H.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接