【问题标题】:Find the corresponding row and column number to an indexed element in a matrix查找矩阵中索引元素对应的行号和列号
【发布时间】:2011-11-16 21:32:39
【问题描述】:

我想在矩阵中获取(并存储)相应的行号和列号,例如。到元素编号 12。

adj.m <- diag(c(3,2,1),nrow = 3, ncol = 3)

现在我想找到对应于元素 4 或 5 或任何元素的行。 adj.m[4] 返回 value(0),但我想获取相应的行号和列号(在本例中为 1 和 2)并将其存储在一个变量中。

我假设它是一个简单的命令,但我无法提出问题,即 Rseek 或 Google 返回答案。

【问题讨论】:

    标签: arrays r matrix


    【解决方案1】:

    试试arrayInd函数:

    arrayInd(7, .dim=c(3,3))
    #      [,1] [,2]
    # [1,]    1    3
    

    【讨论】:

      【解决方案2】:

      如果i是你的索引,m是你的矩阵,那么i的行和列可以用

      get_row <- function(i, m) (i-1) %% ncol(m) + 1
      get_col <- function(i, m) ((i-1) %/% ncol(m)) + 1
      

      用法是,例如,

      get_row(4, adj.m)
      get_col(4, adj.m)
      

      其实,伊恩的回答可能更自然一些。你可以把它包装成一个函数

      get_row_col <- function(i, m)
      {
        x <- array(seq_along(m), dim = dim(m))
        which(x == i, arr.ind = TRUE)
      }
      

      这也适用于两个以上的维度,例如,

      m <- array(1:24, dim = 2:4)
      get_row_col(1:24, m)
      

      【讨论】:

      • 谢谢大家,非常好的解决方案! lain 的回答可能更自然,但我假设它基本上会生成一个可以消耗内存的第二个矩阵(例如,在 1000*1000 矩阵的情况下)
      【解决方案3】:

      我认为which() 会起作用

      x <- matrix(nrow=3, ncol=3, data=seq(1:9))
      which(x==6, arr.ind=TRUE)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-14
        • 2015-07-29
        • 1970-01-01
        相关资源
        最近更新 更多