【问题标题】:non-conformable arrays error when multiplying two matrix (*%*)将两个矩阵相乘时出现不一致的数组错误 (*%*)
【发布时间】:2020-01-31 14:24:08
【问题描述】:

下一个可重现的代码生成 183 个随机法线的 394 个观察值,并尝试将它们与 Cholesky 分解相关:

生成参数

d <- 211

l <- 183

m <- -0.006495094

vectorsd <- rep(0.29, 183)

生成不相关的随机法线

rnormd <- as.data.frame(rnorm(l, mean = m, sd = vectorsd))

for (i in 1:(d+l))  {
  rnormd[,i] <- rnorm(l, mean = m, sd = vectorsd)
}

生成随机半定正相关矩阵

v <- runif(183,0.6,0.8)
corr <- `diag<-`(tcrossprod(v),1)

生成cholesky矩阵

cholesky <- chol(corr)

关联法线并转置输出

rnormd <- t(t(rnormd)%*%cholesky)

在最后一条指令中我得到了错误

rnormd * cholesky 中的错误:不一致的数组

一开始以为转置我的cholesky矩阵可以解决问题,但后来我意识到chol()函数已经转置了它。

谁能帮帮我?

【问题讨论】:

  • cholesky %*% as.matrix(rnormd) 呢?
  • t(as.matrix(rnormd)) %*% cholesky 工作正常。您需要确保 (1) 使用矩阵乘法 %*% 而不是 (*),以及 (2) A 的 ncol 等于 A %*% B 中 B 的 nrow
  • @dww 所以,问题在于它不会自动强制转换为矩阵格式。有效。赞成
  • NP。顺便说一句,您为什么首先转换为 data.frame ?似乎整个计算最好用矩阵来完成
  • 投票结束是一个错字,因为只是对非矩阵执行矩阵乘法

标签: r random normal-distribution


【解决方案1】:

如果你想将两个矩阵相乘,你应该使用%*% 而不是* 符号。所以这是你应该修复的部分。

rnormd <- t(t(rnormd)%*%cholesky)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多