【问题标题】:Matrix inversion R using solve and others (error 'a' must be a complex matrix)使用solve和其他的矩阵求逆R(错误'a'必须是一个复数矩阵)
【发布时间】:2016-04-05 09:59:53
【问题描述】:

我不是高级 R 用户。我主要用它来进行矩阵代数计算。我有一个大矩阵(9400 x 9400;675.1 MB),我很想反转它。我试过“解决”函数和“chol2inv”,我得到“错误...'a'必须是一个复杂的矩阵”。我也尝试过使用 MASS 包中的“ginv”函数,我收到错误消息“svd(X) 中的错误:'x' 中的无限或缺失值”。 我确定我的矩阵没有空(全零)列或行。我已经检查过: Remove columns with zero values from a dataframe 和我得到相同的矩阵。也没有 NA 值,我使用Determine the number of NA values in a column 进行了测试。我的矩阵是数字和方阵(“is.numeric”和“is.matrix”答案为 TRUE,“dim”9400x9400)。当使用 matrixcalc 包中的“is.singular.matrix”时,错误消息再次是 Error in determinant.matrix(x, logarithm = TRUE, ...) : 'a' 必须是复矩阵。因此,我不知道为什么 R 不能计算反转。请问,你知道我该如何解决我的问题吗?非常感谢

【问题讨论】:

  • 也许this question 有帮助...无论如何,我知道你不能发布这样的位矩阵,但如果你的问题是可重现的,那么帮助你有点困难。此外,也许如果您发布了代码,即使它只是函数调用。谢谢
  • Fortune 260 可能是相关的。
  • 你检查过M[!is.finite(M)]吗?
  • 我无法重现您的问题。对我来说它有效:set.seed(42); x <- matrix(rnorm(9400L*9400L), 9400, 9400); y <- solve(x) 但计算需要 1 小时。我使用了没有任何 GUI 的纯 R 命令行。

标签: r


【解决方案1】:

问题在于无限。 R 将 0/0 转换为无限,但我没有考虑它,因为错误消息有点太模糊了。

Matrix[is.infinite(Matrix)] <- 0 解决了我的问题。

【讨论】:

  • 它可能会解决编程问题,但也可能会产生数学问题。
猜你喜欢
  • 2016-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-07
相关资源
最近更新 更多