【问题标题】:Converting a m x n matrix to a n*m x 3 matrix将 m x n 矩阵转换为 n*m x 3 矩阵
【发布时间】:2016-01-19 17:21:00
【问题描述】:

我目前有一个 479 x 729 的矩阵,我想将此矩阵转换为三列矩阵,这样第一列是原始矩阵的行条目,第二列是原始矩阵,第三列是该列和行条目的值。

有没有简单的方法来做到这一点?我查看了reShape 函数,但还没有弄清楚如何在这里应用它。这样做的动机是能够为矩阵中的元素创建一个距离表,包括它们的位置。

【问题讨论】:

  • 可以粘贴示例数据吗?
  • 你已经尝试过什么?你在哪里卡住了? 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定问题或错误以及在问题本身中重现它所需的最短代码。请见:How to create a Minimal, Complete, and Verifiable example.

标签: r matrix distance


【解决方案1】:

可能有更好或更聪明的方法,但这似乎直截了当且足够快:

m <- matrix(rnorm(349191), 479, 729)

row_num <- as.vector(row(m))
col_num <- as.vector(col(m))
val <- as.vector(m)

new_m <- as.matrix(cbind(row_num, col_num, val))

dim(new_m)
# [1] 349191      3

head(new_m)
#      row_num col_num          val
# [1,]       1       1 1.0839690124
# [2,]       2       1 0.7363313818
# [3,]       3       1 0.0001195304
# [4,]       4       1 0.2123100877
# [5,]       5       1 0.1293427830
# [6,]       6       1 1.1773676868

tail(new_m)
#           row_num col_num         val
# [349186,]     474     729 -0.07942063
# [349187,]     475     729 -0.25694755
# [349188,]     476     729 -0.69421258
# [349189,]     477     729  1.24861689
# [349190,]     478     729  0.24377606
# [349191,]     479     729  0.49150676

【讨论】:

    【解决方案2】:

    你可以使用:

    library(reshape2)
    melt(M)
    

    M 是你的矩阵

    【讨论】:

    • 这个函数似乎不是 R 的 vanilla 发行版的一部分(至少它不在 3.2.3 中)。您打算参考哪个包?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    • 2015-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多