You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R语言中如何获取fda对象中每条曲线的最大值坐标?

获取FDA导数曲线每条曲线的最大值坐标

先给出模拟生成FDA对象及其一阶导数的示例代码(对应你提到的df1_obj):

# 加载依赖包
library(fda)
library(fdaoutlier)

set.seed(123)
n_curves <- 5  # 模拟5条曲线
x_grid <- seq(0, 1, length.out = 100)  # x轴网格点
# 生成带噪声的正弦曲线数据
curve_data <- replicate(n_curves, sin(2*pi*x_grid) + rnorm(length(x_grid), 0, 0.1))

# 创建B样条基并转换为FDA对象
bspline_basis <- create.bspline.basis(rangeval = c(0,1), nbasis = 10)
df1_obj <- smooth.basis(x_grid, curve_data, bspline_basis)$fd

# 计算一阶导数
df1_deriv <- deriv.fd(df1_obj, 1)

实现步骤

  1. 提取导数曲线的数值与x轴点
    用eval.fd()将FDA格式的导数曲线转换为数值矩阵,同时指定要评估的x轴网格点:
# 定义评估x点(可根据需求调整精度)
eval_points <- seq(0, 1, length.out = 100)
# 评估导数曲线,得到每行对应x点、每列对应曲线的数值矩阵
deriv_values <- eval.fd(eval_points, df1_deriv)
  1. 获取每条曲线的最大值坐标
    对数值矩阵按列(每条曲线)查找最大值的位置,再匹配对应的x和y值:
# 找出每条曲线最大值对应的索引
max_positions <- apply(deriv_values, 2, which.max)

# 整理成数据框,包含曲线ID、最大值x坐标、最大值y值
max_coords_df <- data.frame(
  curve_id = 1:ncol(deriv_values),
  max_x = eval_points[max_positions],
  max_y = deriv_values[cbind(max_positions, 1:ncol(deriv_values))]
)
  1. 查看结果
    打印输出每条曲线的最大值坐标:
print(max_coords_df)

说明

  • eval.fd()是FDA包中用于将函数对象转换为数值矩阵的核心函数,确保我们能直接对曲线数值进行操作
  • apply(..., 2, which.max)按列遍历矩阵,定位每条曲线最大值的位置索引
  • cbind(max_positions, 1:ncol(deriv_values))用于构造矩阵索引,精准提取每个最大值对应的数值,避免索引错位问题

内容的提问来源于stack exchange,提问作者Allerleirauh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 04:20:17