【问题标题】:How to know which elements have been chosen when I sample from elements of a matrix?当我从矩阵的元素中采样时,如何知道选择了哪些元素?
【发布时间】:2016-10-21 23:27:45
【问题描述】:

所以我有一个由零填充的 20x20 矩阵。我已经对这个矩阵进行了采样,现在有一个带有来自这个样本的数字的向量。如何获取矩阵中那些采样零的坐标?

a <- numeric(400)
mat <- matrix(a, 20, 20)
set.seed(1234)
sample_vector <- sample(mat, 6, replace=TRUE)

我试过了

which (mat ==0, arr.ind=TRUE)

但它返回矩阵中所有零的坐标(不出所料),并且考虑到矩阵仅填充零,它不会返回采样零的坐标。

我如何获得这些坐标?

【问题讨论】:

    标签: r matrix


    【解决方案1】:

    问题就像从一盒 400 个白球中抽出 6 个球并替换。除非您为所有 400 个球标上唯一编号,否则它们是相同的,并且无法知道哪些已被绘制。

    同样,现在您的矩阵元素由(i,j) 标记。您可以直接采样位置:

    i <- sample(20, 6, TRUE)
    j <- sample(20, 6, TRUE)
    

    那么被采样的元素是mat[cbind(i,j)]

    【讨论】:

      【解决方案2】:

      您可以考虑到矩阵只是一个具有dim 属性的向量,实际上具有:

       length(mat)
      [1] 400
      

      知道元素是按列存储的,您可以使用矩阵的长度进行采样:

       set.seed(1234)
       ind <- sample(length(mm), 10)
       ind
       [1] 12 62 60 61 83 97  1 22 99 47
      

      然后是子集:

       mat[ind]
       [1] 0 0 0 0 0 0 0 0 0 0
      

      但你现在会知道第一个 0 与 12 相关,即矩阵的元素 [2,2] 中包含的元素,第二个零包含在元素 [2,7] 中,第三个 [10, 6] 中包含.

      当然,如果矩阵有 8 行和 7 列,我们想知道第 23 个元素,将 23 除以 8,删除整数部分并将行数乘以小数部分:

       ((23 / 8))
      [1] 2.875
       8 * 0.875
      [1] 7
      

      前两列将是“满的”,因此第 23 个元素将位于第三列的第七位。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多