当我从矩阵的元素中采样时,如何知道选择了哪些元素?

时间:2016-10-21 23:27:45

标签: r matrix

所以我有一个由零填充的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)

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

我如何获得这些坐标?

2 个答案:

答案 0 :(得分:2)

问题就像从一盒400个白球中取出6球一样。除非你用唯一的数字标记所有400个球,否则它们是相同的,并且无法知道绘制了哪个。

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

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

然后,正在采样的元素是mat[cbind(i,j)]

答案 1 :(得分:0)

你可以考虑到矩阵只是一个具有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] ((23 / 8)) [1] 2.875 8 * 0.875 [1] 7 1}}等等。

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

var msg = theMessage;

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