【问题标题】:R - Averaging specific matrix indices over matrixR - 在矩阵上平均特定矩阵索引
【发布时间】:2018-04-13 21:33:24
【问题描述】:

我有两个矩阵。第一个 m1 是 100x100,包含带小数位的数字,另一个 m2 是 300x100,并且很少填充整数,如下所示:

m1 <- matrix(rexp(1000, rate = .1), ncol = 100)
m2 <- matrix(sample(c(rep(0, 1000), rep(1, 10), rep(2, 1)), 300 * 100, replace = T), 300, 100)

m1 中的每一行对应m2 中相同编号的列。 m2 的每一列代表该观察在 m1 中相应行的出现次数。

对于m2 中的每一行,我想得到m1 每一行的colMeans 对应于它在m2 的那一行中出现的次数。结果应该是一个 300x100 的矩阵。我想知道最有效的方法。

这是一项复杂的操作,但希望您能理解我的意思。如果您需要任何澄清,我可以给它。如果有帮助,我正在尝试从单词特征矩阵和文档术语矩阵中获取文档特征矩阵。

【问题讨论】:

  • 您应该发布一个尺寸非常小的可重现示例,例如 3x3 和 4x3,以及预期的输出
  • 一般策略是将 m1 扩展为 3d 张量(例如,张量流中的 tf.tile),然后使用张量点积确保折叠正确的尺寸,然后是 @987654333 @沿正确的轴。
  • 操作不明白。我不熟悉“相应”均值-您的意思是加权均值吗?我同意 Moody 的观点,即使用低尺寸 3x3 和 4x3 的工作示例可以使这一点变得清晰明了,同时为解决方案提供良好的测试用例。

标签: r matrix average


【解决方案1】:
dtm <- matrix(c(0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0), ncol = 4)
wvm <- matrix(c(27.305102,  9.095906, 3.792833, 17.561222, 32.06434, 4.719152, 8.367996, 0.0568822), ncol = 2)

dtm
wvm

t(apply(dtm, 1, function(dtm_row) {
  vs <- wvm[dtm_row > 0, ] * dtm_row[dtm_row > 0]
  if (is.matrix(vs)) { colMeans(vs) } else vs
}))

解决了我自己的问题。但如果有人想改进我的方法,我会将那里的答案标记为正确的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    相关资源
    最近更新 更多