【问题标题】:Select subset of N-dimensional array with m-dimensional array?用m维数组选择N维数组的子集?
【发布时间】:2012-06-14 03:31:08
【问题描述】:

是否可以用二维二进制数组选择一个三维数组的子集?我希望能够这样做,以便我可以将值推送到选择中

例如,我有一个数组 dim(a) = (lat, long, time),我想使用 dim(b) = (lat, long) 进行选择,这是一个充满 TRUE/FALSE 值的数组。我希望能够做类似的事情:

> a <- array(c(1,2,3,4,5,6,7,8),c(2,2,2))
> b <- matrix(c(0,1,0,0), c(2,2))==TRUE
> a[[b]] <- 0
> a
, , 1
     [,1] [,2]
[1,]    1    3
[2,]    0    4

, , 2
     [,1] [,2]
[1,]    5    7
[2,]    0    8

编辑:好的,所以这看起来像一个愚蠢的问题,因为我刚刚意识到如果您使用a[b] &lt;- 0(单括号),它的工作原理与上述完全一样。但这仅在您要跨越的维度是最后的维度时才有效。所以,为了让它更有趣:

如果您要跨越的维度是第一个或第二个维度,您如何执行此操作 - 例如。 if dim(b)==(lat, years)?

【问题讨论】:

  • 为什么不简单地使用a[1, ,] 或类似a[1:2, ,1] 的变体?
  • @Andrie:因为我还没有完全理解它。我会尝试:)
  • 啊,好的。我和你一样发现很难把一个人的头绕在矩阵上。我将在我的答案中添加一个示例。

标签: r multidimensional-array


【解决方案1】:

R 支持使用 [ 运算符对数组进行矩阵子集化(即单括号,而不是双括号 - 双括号将始终只返回单个元素):

a[b] <- 0
a

, , 1

     [,1] [,2]
[1,]    1    3
[2,]    0    4

, , 2

     [,1] [,2]
[1,]    5    7
[2,]    0    8

请注意,这与您在问题中指定的结果有些不同。在您的问题中,第二个元素(即矩阵的左下元素)是 1,因此您希望每个数组切片的第二个元素被修改。 (换句话说,不是第一个,就像您在示例中所做的那样。)

【讨论】:

  • 嗨,Anrie,我只是在您发布之前就意识到了这一点,并编辑了我的问题。你的回答当然是正确的,所以谢谢。我已经扩展了这个问题,以使其不那么愚蠢:D。 (感谢指出错误,我会改正的)。
猜你喜欢
  • 2016-07-02
  • 1970-01-01
  • 1970-01-01
  • 2020-05-15
  • 1970-01-01
  • 2021-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多