【问题标题】:Is there a way to vectorize selection of columns (with repetition) from a matrix?有没有办法对矩阵中的列选择(重复)进行矢量化?
【发布时间】:2018-08-27 11:54:59
【问题描述】:

我有一个大小为n x k 的矩阵L 和一个大小为p 的向量Z。 Z 由表示 L 的列索引的整数组成。我想创建一个大小为 n x p 的矩阵 X,它是根据 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

在我的原始数据中,pkn 非常大(分别为 30K、500 和 2K),并且对所有 Z 值进行循环以选择和组合来自 L 的列需要非常很久。是否有矢量化方式(无循环)来完成这项任务?

【问题讨论】:

  • 很确定这只是L[,Z] - 当您从大多数对象中进行选择时,R 并不关心您是否有重复的列索引。
  • 您提到了聚合,但您的输出与@thelatemail 所建议的一样。还有一步吗?
  • @thelatemail 哇,太好了,谢谢!!我没有尝试常规索引,因为出于某种原因,我确信它不适用于重复索引。有时候,即使你没有任何希望,尝试一下也是有意义的,看起来……

标签: r matrix vectorization


【解决方案1】:

很确定这只是:

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 并不关心您是否有重复的列索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 2018-06-05
    相关资源
    最近更新 更多