【问题标题】:R: Generate a list of canonical matrixR:生成规范矩阵列表
【发布时间】:2014-05-27 08:28:12
【问题描述】:

这是我的问题。 我正在尝试创建一个列表,其中包含大小为 nxn 的所有对称规范矩阵,对角线为 1,..,1,并且每个三角形中的 k 元素等于一个。

例如,如果 n=3 和 k=2,我想生成所有 3x3 对称矩阵,对角线具有 1,1,1 和 2 个元素等于 1 上下对角线:

1 1 1    
1 1 0    
1 0 1

1 1 0    
1 1 1    
0 1 1

1 1 0    
1 1 1    
0 1 1

1 0 1    
0 1 1    
1 1 1

你能帮帮我吗?

问候

【问题讨论】:

  • 您希望我们为您编写逻辑吗?至少展示你尝试过的东西......然后我们可以考虑一下......

标签: r loops matrix


【解决方案1】:

我不明白你为什么要生成第二个矩阵两次。因此,下面的解决方案只是创建具有所需属性的所有唯一对称矩阵。如果你想要其中一些两次,你将不得不稍微调整一下代码。

# load required packages
require(plyr)
# function to generate a list of "canonical matrices"
generate.canonical.matrix <- function(n, k){
  # initialize
  m <- matrix(0, nrow=n, ncol=n)
  # number of positions in the upper triangle
  K <- n*(n-1)/2
  if (K<k) stop("k cannot be larger than n*(n-1)/2")
  # upper triangle matrix
  upper <- which(upper.tri(m))
  # for all combinations of k elements
  alply(combn(K, k), 2, function(index){ # CHANGE combn(K, k) TO GET NON-UNIQUE MATRICES
    # set upper tirangle matrix 
    m[upper[index]] <- 1
    # combine upper, lower and diagonal matrices
    m+t(m)+diag(n)
  })
}
# function call
generate.canonical.matrix(3, 2)

【讨论】:

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