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

如何用scikit-fda构建m变量n观测的时间信号数据集以执行FDA?

解决scikit-fda FDataGrid维度不匹配问题

你遇到的维度不匹配问题,核心是混淆了输入维度和输出维度的概念:

  • grid_points参数对应的是输入变量的网格点(这里输入只有时间这1个维度),你设置[t,t]会让scikit-fda认为输入是2维(比如x/y空间坐标),但实际数据是单输入维度的时间序列。
  • 你的data_matrix_target形状是(2,100),scikit-fda会将其解析为「2个观测,每个观测是100个点的1维输出」,但你实际需要的是「2个观测,每个观测是100个时间点对应2个变量的输出」,所以数据矩阵的形状需要调整。

正确构造方式

调整数据矩阵的结构,让每个观测对应「时间点数 × 变量数」的数组,再组合成「观测数 × 时间点数 × 变量数」的矩阵,同时将grid_points设为单时间向量:

import numpy as np
import skfda

# 原始数据
obs1_var1 = np.ones(100, dtype=int)
obs2_var1 = np.ones(100, dtype=int)*2
obs1_var2 = np.ones(100, dtype=int)*3
obs2_var2 = np.ones(100, dtype=int)*4
t = np.linspace(0, 100, num=100, dtype=int)

# 整理每个观测的变量:将同一观测的两个变量按时间点堆叠
obs1 = np.stack([obs1_var1, obs1_var2], axis=1)
obs2 = np.stack([obs2_var1, obs2_var2], axis=1)

# 组合成最终的数据矩阵,形状为 (观测数, 时间点数, 变量数)
data_matrix_target = np.array([obs1, obs2])

# grid_points对应输入维度(仅时间1维)
grid_points_target = [t]

# 构造FDataGrid
dg_target = skfda.FDataGrid(data_matrix_target, grid_points_target)

# 验证结构
print(dg_target.shape)  # 输出 (2, 100, 2),对应2个观测、100个时间点、2个变量

额外说明

  • 如果是多输入维度的功能数据(比如2D空间网格上的信号),grid_points才需要传入多个向量(比如x坐标网格和y坐标网格),此时数据矩阵的形状应为「观测数 × 网格点1数量 × 网格点2数量 × 输出维度」。
  • 你的场景属于单输入、多输出的功能数据,输入仅时间1维,输出是2个变量,因此只需调整数据矩阵的堆叠方式即可解决维度问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 18:17:39