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

如何从scikit-fda的FDataGrid实例中删除特定函数?

问题原因分析

第一个错误的根源

np.delete(X_prim, [0,1,2])会把FDataGrid实例当成普通numpy数组处理,直接返回一个numpy.ndarray——这是因为numpy的函数默认会尝试将输入对象转换为数组。所以你后续调用X.tolist()看着像对,但X已经不是FDataGrid实例了,自然没有data_matrix这类专属属性,导致MissingValuesInterpolation报错。

第二个错误的根源

FDataGrid的data_matrix形状通常是(n_samples, n_dimensions, n_grid_points),其中第一维是样本(也就是你说的“函数”)的数量。你直接调用np.delete(matrix, [2,13,103,111])时,numpy默认会按最后一维(网格点维度)删除元素,而不是你想要的第一维(样本维度)。这就导致修改后的data_matrix形状完全不对,重新创建FDataGrid时,系统会错误地把修改后的维度当成样本数,自然识别成只有一个函数,同时grid_points因为和新的data_matrix维度不匹配而被破坏。

正确解决方案

FDataGrid本身支持numpy风格的索引操作,直接通过索引筛选保留的样本即可,无需手动处理data_matrix:

方法1:用整数索引保留需要的样本

import numpy as np

# 定义要保留的样本索引(排除要删除的[0,1,2])
keep_idx = np.setdiff1d(np.arange(X_prim.n_samples), [0,1,2])
# 直接索引得到新的FDataGrid实例
X_filtered = X_prim[keep_idx]

方法2:用布尔掩码筛选

import numpy as np

# 创建掩码,标记要保留的样本(True=保留,False=删除)
mask = np.ones(X_prim.n_samples, dtype=bool)
mask[[0,1,2]] = False  # 把要删除的索引设为False
X_filtered = X_prim[mask]

这样得到的X_filtered仍是完整的FDataGrid实例,保留了原有的grid_points、data_matrix等所有属性,后续可以正常使用MissingValuesInterpolation处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 22:07:31