【问题标题】:How to select part of a tensor (multidimensional array) with a vector of dimension names?如何选择具有维名称向量的张量(多维数组)的一部分?
【发布时间】:2021-06-09 12:08:24
【问题描述】:

在 R 的一个项目中,我遇到了这个问题,我真的很困惑:

例如,我有一个张量 T(维度 3x2x2)和一个向量 A

T <- array(c(1,2,3,4,5,6,7,8,9,10,11,12), dim=c(3,2,2), dimnames=list(c("X","Y","Z"),c("1","2"),c("a","b")))
A <- c(NA, "2","b")

我想知道如何使用矢量A 获得T[ ,"2","b"]?我尝试了 T[A] 和其他许多东西一样长,但它似乎不起作用。请注意,A 是一个变量,它很可能变成A &lt;- c(NA, NA,"a"),在这种情况下我们希望有T[ , ,"a"]

非常感谢您的帮助!

【问题讨论】:

  • 我不确定您正在寻找的内容是否可以通过 R 中的标准方式实现。第一种也是最简单的方法是为 [ 函数创建一个带有参数的列表并使用 do.call([, args)(注意由于降价,括号缺少连字符)。但这根本行不通:v &lt;- vector('list', 3); v[[3]] &lt;- 'b'; do.call([, c(list(T), v))) 返回一个空矩阵(再次注意尖括号缺少连字符)。唯一的方法似乎是同时包含缺失维度的索引,这使得这种做法非常不切实际并且内存效率低下。

标签: r arrays tensor


【解决方案1】:

试试这个(有点复杂):

A2<-as.list(A)
A2[is.na(A)]<-TRUE
do.call(`[`,c(list(T),A2))
# X  Y  Z 
#10 11 12

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 2021-02-26
    • 2013-02-05
    • 2014-05-02
    • 2021-07-24
    • 2023-02-06
    • 1970-01-01
    相关资源
    最近更新 更多