【问题标题】:Generate permutation matrix from permutation vector从置换向量生成置换矩阵
【发布时间】:2015-10-01 01:44:51
【问题描述】:

假设我有一个排列向量(行排列)

x <- c(1,2,3,4,7,8,5,6,9,10) # I exchanged 7 with 5 and 8 with 6.

R中是否有任何函数可以从置换向量生成相应的置换矩阵?如果有,请举个例子。

【问题讨论】:

  • 到目前为止您搜索/尝试了什么?
  • 我注意到R中有一个pMatrix类。但它只是以稀疏的方式存储一个置换矩阵,并且可以生成置换向量。但我没有看到任何可以从置换向量到置换矩阵的函数。

标签: r permutation


【解决方案1】:

我相信这可以通过重新排序单位矩阵的行来完成:

x <- c(1,2,3,4,7,8,5,6,9,10)
diag(length(x))[x,]
#       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#  [1,]    1    0    0    0    0    0    0    0    0     0
#  [2,]    0    1    0    0    0    0    0    0    0     0
#  [3,]    0    0    1    0    0    0    0    0    0     0
#  [4,]    0    0    0    1    0    0    0    0    0     0
#  [5,]    0    0    0    0    0    0    1    0    0     0
#  [6,]    0    0    0    0    0    0    0    1    0     0
#  [7,]    0    0    0    0    1    0    0    0    0     0
#  [8,]    0    0    0    0    0    1    0    0    0     0
#  [9,]    0    0    0    0    0    0    0    0    1     0
# [10,]    0    0    0    0    0    0    0    0    0     1

【讨论】:

    【解决方案2】:

    这也可以通过sparseMatrix 完成

    library(Matrix)
    m1 <- sparseMatrix(seq_along(v1), v1, x=1)
    

    我们可以用as.matrix强制它到matrix

    as.matrix(m1)
    

    数据

    v1 <- c(1,2,3,4,7,8,5,6,9,10)
    

    【讨论】:

    • 大排列向量的绝佳选择!