如何从 FDataGrid 实例中删除某些功能?

问题描述 投票:0回答:1

我正在使用 scikit-fda Python 包,并且我正在尝试理解 FDataGrid 类。特别是,我想操作 FDataGrid 类的给定实例(称为 X_prim),以便我可以从中删除某些函数。

我的第一直觉是尝试像

X = np.delete(X_prim, [0,1,2])
这样简单的事情,删除前三个函数。事实上,当我使用
X.tolist()
显示值时,一切似乎都是正确的(我得到与
X_prim.tolist()
相同的回报,除了所需的数组不再存在)。但是,当我尝试使用新的 FDataGrid 实例时,我总是会遇到某种错误。比如说

from skfda.preprocessing.missing import MissingValuesInterpolation
nan_interp = MissingValuesInterpolation()
X_transformed = nan_interp.fit_transform(X_prim)

工作完美,但是当我尝试运行时

from skfda.preprocessing.missing import MissingValuesInterpolation
nan_interp = MissingValuesInterpolation()
X_transformed = nan_interp.fit_transform(X),

我收到错误“AttributeError:'numpy.ndarray'对象没有属性'data_matrix'”。显然,我的 FDataGrid 并不是我想象的那样。这让我想也许我应该尝试编辑 X_prim 的 data_matrix,然后手动构建一个新实例。为了这只海豚我跑步

matrix=X_prim.data_matrix
matrix = np.delete(matrix, [2,13,103,111])
X=skfda.FDataGrid(data_matrix=matrix)

但是运行

X.tolist()
显示这被解释为只有一个函数的 FDataGrid,所有剩余函数的所有剩余值都属于该函数。当然,grid_points 属性也会被破坏。因此,除了如何从 FDataGrid 中删除某些功能(这是我最初的目标)之外,我还想知道这里到底发生了什么。我的意思是,我只是从 FDataBasis 本身获取矩阵,删除一些值,当我尝试创建新的 FDataBasis 实例时,矩阵会以完全不同的方式解释。为什么会发生这种情况以及如何预防?

python scikit-learn scikits
1个回答
0
投票

要删除功能数据,您可以使用

FDataGrid.copy()
,如下所示。

import numpy as np
import skfda

fd, _ = skfda.datasets.fetch_growth(return_X_y=True)
keys = [1,2] # indices of function data to be deleted
new_data_matrix = np.delete(fd.data_matrix, keys, axis=0)
new_sample_names = np.delete(np.array(fd.sample_names), keys)
new_fd = fd.copy(data_matrix=new_data_matrix, sample_names=new_sample_names)

而您观察到的原因是因为您没有指定其他重要参数,例如

grid_points

© www.soinside.com 2019 - 2024. All rights reserved.