【问题标题】:Index a matrix based on another matrix's values根据另一个矩阵的值索引一个矩阵
【发布时间】:2015-08-21 16:48:51
【问题描述】:

我有一个矩阵(实际上是一个 3-D 数组),我想根据另一个矩阵(完全二值化)中的值对其进行“阈值化”。所以,例如

set.seed(1234)
M <- matrix(1:9, nrow=3, byrow=F)
M
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
set.seed(1234)
N <- matrix(sample(c(0, 0, 1), 9, replace=T), nrow=3)
N
     [,1] [,2] [,3]
[1,]    0    0    0
[2,]    0    1    0
[3,]    0    0    0

我只想保留M 中与N 等于1 的位置相同的值;将其余部分变为 0。输出应该是:

M.thresh
     [,1] [,2] [,3]
[1,]    0    0    0
[2,]    0    5    0
[3,]    0    0    0

【问题讨论】:

  • 我添加了 set.seed 函数以实现重现性。将您想要的输出修复到那些新的(并且总是相同的)矩阵。
  • M.thresh &lt;- ifelse(N!=1,0,M)
  • @Heroka 我想我需要多喝一剂咖啡……这是一个非常明显的解决方案。谢谢!
  • 请将答案发布为答案,而不是 cmets :)

标签: r matrix subset


【解决方案1】:

只需用矩阵索引替换即可。

N[N == 1] <- M[N == 1]
N
#      [,1] [,2] [,3]
# [1,]    0    0    0
# [2,]    0    5    0
# [3,]    0    0    0

replace(N, N == 1, M[N == 1])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-17
    • 2015-06-16
    • 2018-11-23
    • 2013-01-20
    • 1970-01-01
    相关资源
    最近更新 更多