代码之家  ›  专栏  ›  技术社区  ›  user5054

有没有办法从矩阵中矢量化列的选择(重复)?

  •  1
  • user5054  · 技术社区  · 7 年前

    我有一个大小为L的矩阵 n x k 和一个大小为Z的向量 p 。Z由表示L的列索引的整数组成。我想创建一个大小为的矩阵X n x p 它是基于Z中的值选择的L的相应列的聚合。

    Z = c(1, 3, 1, 2)
    L = matrix(c(73,50,4,14,87,5,34,51,17,57,47,65),nrow=4)
    > L
         [,1] [,2] [,3]
    [1,]   73   87   17
    [2,]   50    5   57
    [3,]    4   34   47
    [4,]   14   51   65
    

    我希望X是

    > X
         [,1] [,2] [,3] [,4]
    [1,]   73   17   73   87
    [2,]   50   57   50    5
    [3,]    4   47    4   34
    [4,]   14   65   14   51
    

    在我的原始数据中, p ,则, k n 非常大(分别为30K、500和2K),在所有Z值上循环以选择和组合L中的列需要很长时间。是否有一种矢量化的方法(无循环)来执行此任务?

    1 回复  |  直到 7 年前
        1
  •  0
  •   thelatemail    7 年前

    很确定这只是:

    L[,Z]
    #     [,1] [,2] [,3] [,4]
    #[1,]   73   17   73   87
    #[2,]   50   57   50    5
    #[3,]    4   47    4   34
    #[4,]   14   65   14   51
    

    当您从大多数对象中进行选择时,R并不关心是否有重复的列索引。