【问题标题】:Create matrix with diagonal element is matrix in r [duplicate]用对角元素创建矩阵是r中的矩阵[重复]
【发布时间】:2016-04-10 02:33:13
【问题描述】:

我有一个 2X2 矩阵,例如 A=matrix(1:4,2,2)。使用这个矩阵,我想构建对角元素为 A 的矩阵,如下所示。这个例子只有三个 A 但我想用矩阵 A 的 n 个对角元素制作矩阵

|A  0  0|
|0  A  0|
|0  0  A|

【问题讨论】:

  • 查看矩阵包...bdiag:bdiag(rep(list(A), 3))
  • n <- 3; nr <- nrow(A); ii <- vapply(1:n, function(x) row(A) + (x - 1L) * nr, integer(nr ^ 2)); `[<-`(matrix(0, nr * n, nr * n), cbind(c(ii), sort(ii)), rep(A, n)) 适用于方阵。

标签: r matrix sparse-matrix


【解决方案1】:

这是一个递归解决方案:

CreateDiag<-function(n){
 if (n==1) {
    return(A)
 } else{
    A_2<-CreateDiag(n-1)
    temp1<-cbind(A_2,matrix(0,nrow = nrow(A_2),ncol = ncol(A)))
    temp2<-rbind(temp1,cbind(matrix(0,nrow = nrow(A),ncol = ncol(A_2)),A))
    return(temp2)
 }
}

n是你想要的块数)

【讨论】:

  • 尝试 n=1600 后,我收到此错误消息
  • 错误:评估嵌套太深:无限递归/选项(表达式=)?
  • 你知道怎么做吗?
  • 然后,我执行了 options(expressions=10000),然后又执行了 CreateDiag(1600)。但这需要太多时间。你能给出任何解决方案吗?
【解决方案2】:
> DiagonalMatrix <- function(n, x) `diag<-`(matrix(0, n, n), x)
> DiagonalMatrix(2, 10)
     [,1] [,2]
[1,]   10    0
[2,]    0   10

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多