R:阵列第三维上的梯形积分

问题描述

编辑:我最后改变了我的例子,但我仍然被难住了。

如何应用梯形积分函数,以便通过数组的第 3 维对每个矩阵点进行积分?

我正在处理大量数据(2160、4320、46),我想在数组的第三维上使用梯形积分(每个矩阵向下指向第三维的 46 个堆栈)。例如,点 1,1,1 ; 1,2 ; 1,3 等作为积分函数中的 Y 点输入。

编辑:我被告知可以在 Jarek Tuszynski 的 CRAN 包 caTools 中找到此功能

我的 PI 有一个用于梯形积分的自定义函数

trapz = function(x,y){
  idx = 2:length(x)
  return (as.double( (x[idx] - x[idx-1]) %*% (y[idx] + y[idx-1])) / 2)
}

我以前在这样的数组上使用过应用函数

data_output = apply(X = data,MARGIN = 1:2,FUN = function(k) (mean(na.omit(k))) )

但我不知道如何让 trapz 函数沿着我想要的边距工作。

使用简单的示例代码,如果我创建这样的数组:

x.mat = matrix(1:100,nrow = 10,ncol = 10)
y.mat = matrix(1:100,ncol = 10)
library(abind)
x.array = abind(x.mat,(x.mat+1),(x.mat+2),along = 3,force.array = T)
y.array = abind(y.mat,(y.mat+1),(y.mat+2),force.array = T)
apply(MARGIN = 1:2,FUN = trapz,X = x.array,y = y.array)

输出一个具有正确维度 (10,10) 的矩阵,但每个数字都是 4。

请帮助我理解我做错了什么。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)