当前位置: 首页 > 知识库问答 >
问题:

用交替列组合矩阵

翟誉
2023-03-14

我正在寻找一种通用的方法来组合两个矩阵,以便两个初始矩阵中的列在新矩阵中交替出现

col1m1。。。col1m2。。。col2m1。。。二氧化碳。。。col3m1。。。col3m2。。。。。。

例如:

matrix.odd  <- matrix(c(rep(1,3),rep(3,3),rep(5,3)),nrow=3,ncol=3)
matrix.even <- matrix(c(rep(2,3),rep(4,3),rep(6,3)),nrow=3,ncol=3)
# would look like
matrix.combined <- matrix(c(rep(1,3),rep(2,3),rep(3,3),rep(4,3),rep(5,3),rep(6,3)),
                          nrow=3,ncol=6)

我正在寻找一种通用的方法,因为我将有多于3列的矩阵组合。我尝试了一些for循环和一些if语句,但对我来说,它们并没有真正结合在一起。将矩阵与洗牌和交替相结合的搜索也没有被证明是有效的。有什么想法吗?

共有3个答案

陈阳舒
2023-03-14
alternate.cols <- function(m1, m2) {
  cbind(m1, m2)[, order(c(seq(ncol(m1)), seq(ncol(m2))))]
}

identical(matrix.combined, alternate.cols(matrix.odd, matrix.even))
# [1] TRUE

如果m1m2具有不同的列数,那么哪一项也是正确的(主观的):

alternate.cols(matrix.odd, matrix.even[, -3])
#      [,1] [,2] [,3] [,4] [,5]
# [1,]    1    2    3    4    5
# [2,]    1    2    3    4    5
# [3,]    1    2    3    4    5

很容易推广到任意数量的矩阵:

alternate.cols <- function(...) {
  l <- list(...)
  m <- do.call(cbind, l)
  i <- order(sequence(sapply(l, ncol)))
  m[, i]
}
花飞尘
2023-03-14
rows.combined <- nrow(matrix.odd) 
cols.combined <- ncol(matrix.odd) + ncol(matrix.even)
matrix.combined <- matrix(NA, nrow=rows.combined, ncol=cols.combined)
matrix.combined[, seq(1, cols.combined, 2)] <- matrix.odd
matrix.combined[, seq(2, cols.combined, 2)] <- matrix.even
乐健
2023-03-14

像这样的Smth应该做到:

m <- cbind(matrix.odd, matrix.even)                   # combine
m <- m[, c(matrix(1:ncol(m), nrow = 2, byrow = T))]   # then reorder

另一个有趣的选择:

matrix(rbind(matrix.odd, matrix.even), nrow = nrow(matrix.odd))

要玩多矩阵游戏:

weave = function(...) {
  l = list(...)
  matrix(do.call(rbind, l), nrow = nrow(l[[1]]))
}
 类似资料:
  • 我们从一组矩阵开始。参考集合中的所有矩阵,我想创建一个新的矩阵,它表示集合中每个矩阵的列的组合。 集合中的每个矩阵具有不同的行数。当我们组合矩阵时,新行应该用NA填充。新矩阵获取集合中每个矩阵的前3个非NA列并将它们联接起来。 设置 新矩阵: 绑定: 我希望新矩阵的行数与集合中最大的矩阵的行数相同(在本例中,nrow=11)。当集合中的矩阵行不等于11时,用NA填充它们的条目。因此,对于Mat1,

  • 问题内容: 我正在寻找一个jQuery方法来合并两个数组,以便它们的值交替出现: 我想要的结果是: 请注意,我知道在JS中做到这一点并不重要,但是我追求的是jQuery方法。 问题答案: 您可以使用以下方法:

  • 有没有办法在交替列0、2、4、6中设置组件,而不使用GridBagConstraint在GridBagLayout中填充1、3、5的空组件? Java中的示例将第5个按钮设置为从第1列开始,但可能是因为它上面的行已经设置了? https://docs.oracle.com/javase/tutorial/uiswing/layout/gridbag.html

  • 我正在使用Java Swing库。我有两个宽度和高度相同的矩形,坐标相同。我想把它们组合成一个,这样我就能得到一个十字架。我怎样才能做到这一点?

  • 问题内容: 例如,我有一个像这样的矩阵: 我需要将其转换成这样的矩阵: 实现此目标的最佳方式是什么? 问题答案: 请参阅文章:在JavaScript和jQuery中转置数组

  • 给定矩阵(大小by)和幂,(例如,4),产生矩阵,其中每个-th矩阵包含所有中的列在该程度上的可能组合。 在我当前的方法中,我生成-th矩阵,然后在下一次调用中使用它来生成th矩阵。对于给定的功率,这是否可以“自动”完成,而不是手动完成? 说到R,我是一个新手,我明白有可能比下面的尝试更有效、更优雅地实现这个解决方案。。。 有人能提供一些建议吗?我的目标是为给定的矩阵创建一个函数,并以更“自动化”