【问题标题】:Shift all elements of a matrix down one index in R在R中将矩阵的所有元素向下移动一个索引
【发布时间】:2018-11-18 19:27:36
【问题描述】:

我正在尝试使用 R 将某个矩阵的所有元素移动 1。我有一个相当大的 10x10 矩阵,我需要多次执行此操作。我不确定如何以有效的方式做到这一点。例如,我有:

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

目标是矩阵看起来像:

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

谢谢!

【问题讨论】:

标签: r matrix


【解决方案1】:

这是一种选择

mat <- matrix(1:9, nrow = 3)
matrix(c(mat[length(mat)], mat[-length(mat)]),
       nrow = dim(mat)[1])
#     [,1] [,2] [,3]
#[1,]    9    3    6
#[2,]    1    4    7
#[3,]    2    5    8

c(mat[length(mat)], mat[-length(mat)]) 将从mat 中取出最后一个元素并将其放在第一个位置。

我们也可以

mat[] <- c(mat[length(mat)], mat[-length(mat)])

【讨论】:

    【解决方案2】:

    我认为 binhf 包的 shift 函数提供了一个简单易懂的语句,可以允许在任一方向上任意移位大小:

    library(binhf)
    mat <- matrix(1:9, nrow = 3)
    
    matrix(shift(mat,places=1),nrow=dim(mat)[1])
    
    #     [,1] [,2] [,3]
    #[1,]    9    3    6
    #[2,]    1    4    7
    #[3,]    2    5    8
    

    或者简单地说:

    matrix(shift(mat,1),nrow=dim(mat)[1])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-10
      • 2016-05-06
      • 2021-06-30
      • 2021-11-30
      • 1970-01-01
      相关资源
      最近更新 更多