使用每列增加的整数创建矩阵,具有额外的移位和最大值

时间:2014-08-12 16:58:29

标签: r algorithm matrix

我需要在R中创建以下类型的矩阵。让m为每列递增的最大值,n生成矩阵的列数。

适用于m=3n=2

1 0 
2 0 
3 0 
3 1
3 2
3 3

适用于m=4n=3

1 0 0
2 0 0
3 0 0
4 0 0
4 1 0
4 2 0
4 3 0
4 4 0
4 4 1
4 4 2
4 4 3
4 4 4

有谁知道如何做到这一点的好方法? slickest 答案的 +1 ;)

3 个答案:

答案 0 :(得分:2)

由于我对cummax的新知识感谢@AnandaMahto和@alexis_laz,我找到了一个使用Kronecker产品的光滑的产品

apply(diag(n) %x% 1:m, 2, cummax)

答案 1 :(得分:1)

这似乎是有效的,除非我错过了一些东西:

ff = function(m, n) 
   apply(xtabs(rep(seq_len(m), n) ~ seq_len(m * n) + rep(seq_len(n), each = m)), 
         2, cummax)
ff(3, 2)
ff(4, 3)

答案 2 :(得分:1)

我建议的方法是创建一个空矩阵,使用矩阵索引来填充第一组值,然后使用cummax来完成其余的工作。

myFun <- function(m, n) {
  M <- matrix(0, ncol = n, nrow = m*n)
  M[cbind(sequence(nrow(M)), 0:(m*n-1) %/% m + 1)] <- sequence(m)
  apply(M, 2, cummax)
}