【问题标题】:R subsetting and assigning in a multidimensional arrayR子集和多维数组中的分配
【发布时间】:2016-06-18 01:32:12
【问题描述】:

我正在使用带有 3D 维数组的 R。我试图将它用作一组 2D 矩阵,用于不同的时刻。

我发现了一种我真的不明白的行为,我想知道为什么会发生。我试图在这里和其他地方找到解释,但直到现在我仍然有疑问。

我的 3D 数组是这样的:

array3D=array(1:45,c(5,3,3))

正如我所料,我可以访问单个二维矩阵

 array3D[1,,]
     [,1] [,2] [,3]
[1,]    1   16   31
[2,]    6   21   36
[3,]   11   26   41

但是尝试访问两个 2D 矩阵我没有得到我期望的结果

 array3D[1:2,,]
, , 1

     [,1] [,2] [,3]
[1,]    1    6   11
[2,]    2    7   12

, , 2

     [,1] [,2] [,3]
[1,]   16   21   26
[2,]   17   22   27

, , 3

     [,1] [,2] [,3]
[1,]   31   36   41
[2,]   32   37   42

我发现我可以使用 aperm(array3D[1:2,,]) 解决这个问题,但我不明白在做什么。

另一个问题是当我尝试做作业时,我不明白为什么这不起作用

array3D[1:2,,]=matrix(9:1,3,3)
array3D[1,,]
     [,1] [,2] [,3]
[1,]    9    3    6
[2,]    7    1    4
[3,]    5    8    2

我认为我可以通过循环或aaply 来解决这个问题,正如我在此处阅读的那样,但我认为如果我想使用 3D 数组,了解正在发生的事情真的很重要。如果有人能指出我正确的方向,我会非常高兴。

我试图在这里找到答案并阅读http://adv-r.had.co.nz/,但到目前为止还没有运气。

更新

我发现如果不使用第一个索引而是使用最后一个索引,一切正常,但我仍然不明白为什么。 是R固有的东西吗? 是否可以以其他方式使用第一个?

array3D=array(1:45,c(3,3,5))
array3D[,,1:2]=matrix(9:1,3,3)
array3D[,,2]
     [,1] [,2] [,3]
[1,]    9    6    3
[2,]    8    5    2
[3,]    7    4    1

【问题讨论】:

    标签: arrays r matrix multidimensional-array subset


    【解决方案1】:

    我认为您想要实现的目标还不是很清楚,但这里有一些示例: 在您的第一点上,您可以通过执行以下操作在 z 方向上选择三个 3×3 矩阵中的两个:

    array3D[,,1:2]
    

    因此,您可以替换为适当大小的数组:

    array3D[,,1:2] <- array(18:1,c(3,3,2))
    

    关于为什么必须使用第三个索引的问题:将其想象为 3D 坐标系中的 z 方向。行是 x 方向(垂直),列是 y 方向(水平)。在索引array3D[1:2,,] 时,您选择了前两行,同时将所有内容保持在 x 和 z 方向。

    【讨论】:

    • 也许我没有解释清楚,在我的情况下,数组上的一个维度比其他维度大得多,我将更改问题以尝试反映这一点。
    • 我对示例进行了一些更改,以使一个维度大于其他维度。问题是我希望得到前两个三乘三矩阵做array3D[1:2,,],但我搞砸了。我不知道为什么
    • 我期待更复杂的事情,但似乎这确实是一个愚蠢的错误。我正在拔头发,谢谢你的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多