【问题标题】:Adding noise to matrix elements with a specific value向具有特定值的矩阵元素添加噪声
【发布时间】:2016-01-25 13:05:26
【问题描述】:

这是一个非常具体的问题;所以我只是告诉你我在处理什么:

我有一个包含 2 列的巨型矩阵 - 第 1 列是指时间,第 2 列是分子浓度。 分子信号是人为的,这就是基线平坦的原因(图片)。实际应该是有点吵

因此,我想在正态分布之外添加噪声; 我实际上已经量化了具有此基线值的元素:

numb=length(App[,2][App[,2]==min(App[,2])])
noise=rnorm(numb)

我现在正在努力将这种随机噪声添加到元素中

App[,2]==min(App[,2])

我尝试了一个 if 循环:

if(App[,2]==min(App[,2])) {

    App[,2]=App[,2]=+noise
  }

但由于某种原因它不起作用。 (错误“在 if (App[, 1] == min(App[, 1])) { : 条件的长度 > 1 并且只使用第一个元素)

你有什么建议吗?

最良好的祝愿,非常感谢!

【问题讨论】:

  • 也许吧? App[ App[,2] == min(App[,2])] ,2] = App[ App[,2] == min(App[,2])] ,2] +noise
  • 如果有必要,这里是错误的解释。 App[, 1] 是一个长度为> 1 的向量(比如n),min(App[, 1]) 是一个长度为1 的向量。将两个向量与== 进行比较时,返回的(称为ret)是一个长度为n 的向量。由于if 不知道如何处理这个向量,它采用第一个元素,因此如果App[1, 1] == min(App[, 1]true,则满足if 条件,反之亦然。但是,您可以使用 ret 索引 App 并继续。

标签: r noise


【解决方案1】:

也许这会有所帮助:

baseline.index = which(App[,2] == min(App[,2]))
noise = rnorm( length (  baseline.index ))
App[baseline.index,2] = App[baseline.index,2] + noise

【讨论】:

  • 非常感谢 - 效果很好 :) - 遗憾的是,虽然看起来不太现实,但我更接近一步
  • @Arne 重点是选择要更改的点。在这种情况下,您将这些索引存储在 baseline.index 中。与您一样,第 2 行正在产生噪音。我没有使用条件,而是使用了基线的缺陷。最后,我要求 R 将噪声添加到仅具有基线的行中。如果还不清楚,请尝试print (baseline.index)print(App[baseline.index,])
  • 是的,我知道 :) 只有噪声与真实的钙基线曲线不匹配,因为它会快速切换。但这本身就是一个问题。你的代码很可爱:)。
猜你喜欢
  • 2019-02-06
  • 2021-09-17
  • 1970-01-01
  • 2020-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多