【问题标题】:How to replace even or odd colums in a matrix?如何替换矩阵中的偶数列或奇数列?
【发布时间】:2014-10-10 08:44:38
【问题描述】:

例如,如果有这样的矩阵:

realmatrix=matrix(1:16,ncol=4,nrow=4)

这会给出这个:

      [,1] [,2] [,3] [,4]
[1,]    1    5    9   13
[2,]    2    6   10   14
[3,]    3    7   11   15
[4,]    4    8   12   16

我想创建一个函数,如果它有偶数列,则将两列替换为某个值(例如 1:4),那么结果应该是这样的:

   [,1] [,2] [,3] [,4]
[1,]  1    1    1   13
[2,]  2    2    2   14
[3,]  3    3    3   15
[4,]  4    4    4   16

如果矩阵有奇数列,该函数应该只替换奇数列,即中心列:

这是奇数列的矩阵:

realmatrix2=matrix(1:12,ncol=3,nrow=4)

最终结果:

     [,1] [,2] [,3]
[1,]    1    1    9
[2,]    2    2   10
[3,]    3    3   11
[4,]    4    4   12

非常感谢!

【问题讨论】:

  • 如果您的矩阵有 5 列或 6 列,那么,应该替换哪些列?规则不是很清楚。您说仅替换奇数列。您是否正在寻找替换奇数和偶数列矩阵中的中间列?
  • 如果矩阵的列数为奇数,则替换中间的列。如果矩阵有偶数列,则替换两个中心。一。

标签: r


【解决方案1】:

试试:

  fun2 <- function(mat, val){
          stopifnot(length(val)==nrow(mat))
           n <- ncol(mat)
           if( (n/2) %%2 ==0){
           mat[, c(n/2, n/2+1)] <- val
            }
           else {
           mat[, ceiling(n/2)] <- val
           }
           mat
          }

  fun2(realmatrix, 1:4)
   #      [,1] [,2] [,3] [,4]
   #[1,]    1    1    1   13
   #[2,]    2    2    2   14
   #[3,]    3    3    3   15
   #[4,]    4    4    4   16


  fun2(realmatrix2,1:4)
  #       [,1] [,2] [,3]
  #[1,]    1    1    9
  #[2,]    2    2   10
  #[3,]    3    3   11
  #[4,]    4    4   12

  realmatrix5=matrix(1:32, ncol=8,nrow=4)
  fun2(realmatrix5, 1:4)
  #      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
  #[1,]    1    5    9    1    1   21   25   29
  #[2,]    2    6   10    2    2   22   26   30
  #[3,]    3    7   11    3    3   23   27   31
  #[4,]    4    8   12    4    4   24   28   32

更新

如果要更改行:

 funR <- function(mat, val){
        stopifnot(length(val)==ncol(mat))
        n <- nrow(mat)
        if((n/2) %%2==0){
        mat[c(n/2, n/2+1),] <- rep(val, each=2)
         }
         else {
        mat[ceiling(n/2),] <- val
         }
        mat
        }


 funR(realmatrix, 1:4)
 #     [,1] [,2] [,3] [,4]
 #[1,]    1    5    9   13
 #[2,]    1    2    3    4
 #[3,]    1    2    3    4
 #[4,]    4    8   12   16


 realmatrix3 <- matrix(1:15, ncol=5)
  funR(realmatrix3, 1:5)
 #      [,1] [,2] [,3] [,4] [,5]
 #[1,]    1    4    7   10   13
 #[2,]    1    2    3    4    5
 #[3,]    3    6    9   12   15

【讨论】:

  • 你能不能让这两种情况都成为一个函数,它会查看矩阵并判断它是否有偶数或奇数,然后进行替换?
  • 完全相同的东西如何查找行?
  • @Trik23 更新了行函数
猜你喜欢
  • 2012-06-03
  • 2020-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-07
  • 2014-12-22
  • 1970-01-01
  • 2015-01-28
相关资源
最近更新 更多