【问题标题】:R: how to create a matrix given a basis and a set of dimensionsR:如何在给定基础和一组维度的情况下创建矩阵
【发布时间】:2021-04-18 06:21:36
【问题描述】:
make_basis <- function(k, p = 10) replace(numeric(p), k, 1)
width <- 4
index <- 1
len <- 3
vec <- make_basis(index, len)
> vec
[1] 1 0 0

vec 是长度为len 的单位向量。我想用vec 重复width 次和0 在其他地方填充尺寸为(width * len) x len 的矩阵。也就是说,我想要看起来像这样的东西:

      [,1] [,2] [,3] [,4]
 [1,]    1    0    0    0
 [2,]    0    0    0    0
 [3,]    0    0    0    0
 [4,]    0    1    0    0
 [5,]    0    0    0    0
 [6,]    0    0    0    0
 [7,]    0    0    1    0
 [8,]    0    0    0    0
 [9,]    0    0    0    0
[10,]    0    0    0    1
[11,]    0    0    0    0
[12,]    0    0    0    0

这是另一个例子:

width <- 4
index <- 2
len <- 2
vec <- make_basis(index, len)
> vec
[1] 0 1

想要的矩阵是:

     [,1] [,2] [,3] [,4]
[1,]    0    0    0    0
[2,]    1    0    0    0
[3,]    0    0    0    0
[4,]    0    1    0    0
[5,]    0    0    0    0
[6,]    0    0    1    0
[7,]    0    0    0    0
[8,]    0    0    0    1

【问题讨论】:

    标签: r matrix


    【解决方案1】:

    你可以使用这个功能:

    create_matrix <- function(index, width, len) {
      n <- width * len
      val <- seq_len(n)
      sapply(seq(index, n, len), function(x) as.integer(val == x))
    }
    
    create_matrix(1, 4, 3)
    
    #      [,1] [,2] [,3] [,4]
    # [1,]    1    0    0    0
    # [2,]    0    0    0    0
    # [3,]    0    0    0    0
    # [4,]    0    1    0    0
    # [5,]    0    0    0    0
    # [6,]    0    0    0    0
    # [7,]    0    0    1    0
    # [8,]    0    0    0    0
    # [9,]    0    0    0    0
    #[10,]    0    0    0    1
    #[11,]    0    0    0    0
    #[12,]    0    0    0    0
    
    create_matrix(2, 4, 2)
    
    #     [,1] [,2] [,3] [,4]
    #[1,]    0    0    0    0
    #[2,]    1    0    0    0
    #[3,]    0    0    0    0
    #[4,]    0    1    0    0
    #[5,]    0    0    0    0
    #[6,]    0    0    1    0
    #[7,]    0    0    0    0
    #[8,]    0    0    0    1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-10
      • 2018-01-18
      • 1970-01-01
      • 2017-11-07
      • 1970-01-01
      • 2018-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多