R:生成规范矩阵列表

时间:2014-05-27 08:28:12

标签: r loops matrix

这是我的问题。 我正在尝试创建一个列表,其中所有对称规范矩阵的大小为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

你能帮助我吗?

此致

1 个答案:

答案 0 :(得分:0)

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

# 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)