【问题标题】:Applying dy/dx function over matrix in R在 R 中的矩阵上应用 dy/dx 函数
【发布时间】:2016-02-04 15:44:57
【问题描述】:

我正在努力对矩阵中两列之间的多行应用梯度方程。我已经证明我可以通过将变量直接输入函数来正确计算两组数据点(y2-y1/x2-x1)之间的梯度。但是,我无法弄清楚如何将其循环到矩阵中。例如:

gradient<-function(y,x){
  a<-y1-y
  b<-x1-x
  c=a/b
  return(c)
}

我的示例矩阵:

df<-matrix(seq(1:40), ncol=2, nrow = 8)
colnames(df)<-c("x","y")


   df
     x  y
[1,] 1  9
[2,] 2 10
[3,] 3 11
[4,] 4 12
[5,] 5 13
[6,] 6 14
[7,] 7 15
[8,] 8 16

我想做的是编写一个函数,它将采用 y2-y1/x2-x1 并输出梯度,这将继续到 y3-y2/x3-x2,依此类推。对此的任何帮助将不胜感激。我认为函数中变量的索引出错了。

非常感谢, 核磁共振

【问题讨论】:

  • 你能根据这个输入显示你的预期输出吗?你函数中的“n”从何而来?
  • 也许看?diff来计算y2-y1y3-y2等。
  • 对不起,我想我对等式感到困惑,我将对其进行编辑。预期的输出将是一个包含 y(n+1)/y(n)/x(n+1)-x(n) 的所有梯度的向量
  • 类似的东西:diffs &lt;- diff(df); diffs[, 1]/diffs[, 2].

标签: r matrix gradient apply


【解决方案1】:

我希望这对你有用。 rollapply 执行循环。

require(zoo)
A <- matrix(seq(1:40), ncol = 2, nrow = 8)
colnames(A) <- c("x","y")
B <- rollapply(A, width = 2, by = 1, FUN = diff)
C <- B[,"y"]/B[,"x"]   

【讨论】:

  • 我以前从未见过rollapply!有趣的功能,我试试看。
  • 在这种情况下,diff 已经适用于矩阵; B2 &lt;- diff(A); all.equal(B,B2)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-11
相关资源
最近更新 更多