2017-08-09 150 views
3

我的目标是创建:随机二进制矩阵

  • 与条目任01随机填充矩阵。在这种特殊情况下,矩阵是4x24
  • 4行的每一行的行总和正好是6
  • 每个24列的列总和恰好1

呼叫所需的矩阵M

的看着M另一种方式:

  • 有等于1准确24条目。
  • 没有列有超过一个1条目。

进展:

上有一个1进入每一行6点。其余的都是零,矩阵很稀疏。对于4行,这意味着M可以由索引的矩阵唯一确定,该索引存储1条目的位置。调用这个指数矩阵indexM

我填充indexM与不用更换采样的数字1:24

set.seed(30592) 
colNum <- 24 
rowSum <-6 
numZeros <- colNum-rowSum 

OneRow<-c(rep(1,rowSum),rep(0,numZeros)) 


indexM<-matrix(sample(1:24,replace=FALSE), 
        nrow=4,ncol=6,byrow=TRUE) 

对于给定的种子,所述基质是:https://pastebin.com/8T21MiDv

如何将indexM转换为所需的稀疏矩阵?

我在Matrix库中找到了sparseMatrix,但它需要一个向量或行索引和另一个列索引向量,这不是我所拥有的。

谢谢。

+1

'稀疏矩阵(REP(1:4,每= 6),样品(24))'似乎是它,相当直接从阅读' ?sparseMatrix' ..? – Frank

+0

@这是'我'和'j'的曲子吗?如果你能在一个非常棒的答案中解释语法 – GFauxPas

回答

2

我发现sparseMatrixMatrix库中,不过需要一个载体或行索引和列索引的另一种载体,它是不是我有什么。

约束强加......

  • 行指数rep(1:4, 6)
  • 山坳指数1:24

ROW和COL指数之间的匹配是随机的。我们可以...

library(Matrix) 

# fix rows, jumble cols 
sparseMatrix(rep(1:4, each=6), sample(1:24)) 

# fix cols, jumble rows 
sparseMatrix(sample(rep(1:4, each=6)), 1:24) 

# jumbl'm all 
sparseMatrix(sample(rep(1:4, each=6)), sample(1:24)) 

其中的任何一个将返回类似

4 x 24 sparse Matrix of class "ngCMatrix" 

[1,] . . . . | | . . | . . . | | . | . . . . . . . . 
[2,] . | | . . . | . . | . . . . . . . . | . . . | . 
[3,] . . . | . . . | . . | | . . . . | . . . | . . . 
[4,] | . . . . . . . . . . . . . | . . | . | . | . |