【问题标题】:Summing matrices inside matrices when they are stored as lists将矩阵存储为列表时对矩阵内的矩阵求和
【发布时间】:2021-05-27 04:04:11
【问题描述】:

在另一个线程的帮助下,我能够构建以下矩阵,每个矩阵内部有 100 个对角矩阵,每个矩阵的维度为 100 x 100:

Sigma_inverse<-lapply(seq(n), function(k) (diag(seq(n)))^(2*k+1))


我有另一个矩阵 S,它是 100 x 100。如果我按照以下代码对矩阵求和,它就可以工作。

S+Sigma_inverse[[1]]

但是,如果我尝试创建另一个包含 100 个列表的矩阵,矩阵 100 x 100 并将第一个元素相加,或者我希望是 100 x 100 矩阵,如下代码所示:

S_alpha_dim[[1]]+Sigma_inverse[[1]]

我收到以下错误:

> S_alpha_dim[[1]]+Sigma_inverse[[1]]
Error: dims [product 10000] do not match the length of object [1000000]

于是我开始检查矩阵 S_alpha_dim[[1]] 的维度

> dim(S_alpha_dim[[1]])
NULL

这是空的,但后面的矩阵应该是矩阵 S,它是一个 100 x 100 的矩阵,因为它由以下证明:

> dim(S)
[1] 100 100

所以我开始怀疑 R 没有将列表识别为矩阵内的矩阵。但是,我遵循了这个线程,建议使用列表来表示矩阵中的矩阵。 is it possible to have a matrix of matrices in R?

问题:

有人可以帮我解决这个问题吗?

更新:

作为 S 的参考矩阵,以便可以重现代码,它类似于使用以下构造与 2 × 2 矩阵,呈现相同的问题:

matrix_eksa<-matrix(c(1,2,3,4),2,2)

> matrix_eksa_1<-matrix(list(rep(matrix_eksa,100)),100)
> dim(matrix_eksa_1[1])
NULL

【问题讨论】:

  • 似乎S_alpha_dim[[1]] 不是矩阵。你最好展示一个小例子。
  • @ThomasIsCoding 请查看我的更新。
  • 什么是matrix_eksa
  • @ThomasIsCoding matrix_eksa&lt;-matrix(c(1,2,3,4),2,2)

标签: r


【解决方案1】:

我认为你应该使用rep(list(...),100),而不是list(rep(...,100)),即,

matrix_eksa_1 <- matrix(rep(list(matrix_eksa), 100), 100)

然后你会看到

> matrix_eksa <- matrix(c(1, 2, 3, 4), 2, 2)

> matrix_eksa_1 <- matrix(rep(list(matrix_eksa), 100), 100)

> dim(matrix_eksa_1)
[1] 100   1

【讨论】:

  • ``` > matrix_eksa_1 dim(matrix_eksa_1[1]) NULL```
  • @MagnusMoller 你应该使用matrix_eksa_1[[1]]matrix_eksa_1[1] 是一个列表,它没有维度。
  • 仍然得到相同的空维度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
  • 1970-01-01
  • 2017-05-10
  • 2017-05-03
  • 2021-08-23
  • 2014-01-27
相关资源
最近更新 更多