【问题标题】:How to riffle a matrix into another matrix [duplicate]如何将一个矩阵变为另一个矩阵[重复]
【发布时间】:2014-01-25 05:49:34
【问题描述】:

Mathematica 中有一个名为“Riffle”的函数,可用于在另一个矩阵的列之间插入一个矩阵的列。例如,m1m2 矩阵如下:

m1= 1   1   1
    1   1   1
    1   1   1

m2=2    2   2
   2    2   2
   2    2   2

它创造

1   2   1   2   1   2
1   2   1   2   1   2
1   2   1   2   1   2

R 中是否有任何等效的函数可以做到这一点?

【问题讨论】:

  • 您是在寻找您在此问题中描述的特定行为,还是行为更像实际 Riffle 函数的行为?如果是前者,那么像 cbind(m1, m2)[, order(sequence(c(ncol(m1), ncol(m2))))] 这样简单的东西应该可以工作。
  • 可以玩的东西:gist.github.com/mrdwab/8618900

标签: r data-structures matrix


【解决方案1】:

假设您的矩阵具有相同的维度,您可能会使用这个小技巧

m <- rbind(m1, m2)
dim(m) <- rev(dim(m))

m
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    2    1    2    1    2
[2,]    1    2    1    2    1    2
[3,]    1    2    1    2    1    2

另一种选择是使用 gdata 包中的 interleave 函数。该函数交错行而不是列,因此您需要来回转置矩阵。

m <- t(interleave(t(m1), t(m2)))

m
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    2    1    2    1    2
[2,]    1    2    1    2    1    2
[3,]    1    2    1    2    1    2

【讨论】:

    【解决方案2】:

    不知道是不是已经存在(没见过),不过写起来不难:

    riffle <- function(a,b) {
      if (!all(dim(a) == dim(b))) stop("dimensions do not match")
      array(rbind(a, b), dim=c(dim(a)[1], dim(a)[1]+dim(b)[1]))
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-20
      • 1970-01-01
      • 1970-01-01
      • 2012-12-11
      相关资源
      最近更新 更多