xeofs icon indicating copy to clipboard operation
xeofs copied to clipboard

Model cannot fit DataArray without coordiantes

Open nicrie opened this issue 11 months ago • 0 comments

Describe the bug Trying to fit a model to DataArray without coordiantes fails.

Reproducible Minimal Working Example

import numpy as np
import xarray as xr

X = np.random.normal(100, 10)
X = xr.DataArray(Xtrain, dims=("time", "space"))
eof = xeofs.models.EOF(10)
eof.fit(X, dim="time")
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
Cell In[28], [line 9](vscode-notebook-cell:?execution_count=28&line=9)
      [7](vscode-notebook-cell:?execution_count=28&line=7) X = xr.DataArray(Xtrain, dims=("time", "space"))
      [8](vscode-notebook-cell:?execution_count=28&line=8) eof = xeofs.models.EOF(10)
----> [9](vscode-notebook-cell:?execution_count=28&line=9) eof.fit(X, dim="time")

File [~/Projects/xeofs/xeofs/models/_base_model.py:186](https://file+.vscode-resource.vscode-cdn.net/home/nrieger/Projects/xeofs/~/Projects/xeofs/xeofs/models/_base_model.py:186), in _BaseModel.fit(self, X, dim, weights)
    [183](https://file+.vscode-resource.vscode-cdn.net/home/nrieger/Projects/xeofs/~/Projects/xeofs/xeofs/models/_base_model.py:183) self.sample_dims = convert_to_dim_type(dim)
    [185](https://file+.vscode-resource.vscode-cdn.net/home/nrieger/Projects/xeofs/~/Projects/xeofs/xeofs/models/_base_model.py:185) # Preprocess the data & transform to 2D
--> [186](https://file+.vscode-resource.vscode-cdn.net/home/nrieger/Projects/xeofs/~/Projects/xeofs/xeofs/models/_base_model.py:186) data2D: DataArray = self.preprocessor.fit_transform(
    [187](https://file+.vscode-resource.vscode-cdn.net/home/nrieger/Projects/xeofs/~/Projects/xeofs/xeofs/models/_base_model.py:187)     X, self.sample_dims, weights
    [188](https://file+.vscode-resource.vscode-cdn.net/home/nrieger/Projects/xeofs/~/Projects/xeofs/xeofs/models/_base_model.py:188) )
    [190](https://file+.vscode-resource.vscode-cdn.net/home/nrieger/Projects/xeofs/~/Projects/xeofs/xeofs/models/_base_model.py:190) self._fit_algorithm(data2D)
    [192](https://file+.vscode-resource.vscode-cdn.net/home/nrieger/Projects/xeofs/~/Projects/xeofs/xeofs/models/_base_model.py:192) if self._params["compute"]:

File [~/miniconda3/envs/xeofs/lib/python3.11/site-packages/sklearn/utils/_set_output.py:157](https://file+.vscode-resource.vscode-cdn.net/home/nrieger/Projects/xeofs/~/miniconda3/envs/xeofs/lib/python3.11/site-packages/sklearn/utils/_set_output.py:157), in _wrap_method_output.<locals>.wrapped(self, X, *args, **kwargs)
    [155](https://file+.vscode-resource.vscode-cdn.net/home/nrieger/Projects/xeofs/~/miniconda3/envs/xeofs/lib/python3.11/site-packages/sklearn/utils/_set_output.py:155) @wraps(f)
    [156](https://file+.vscode-resource.vscode-cdn.net/home/nrieger/Projects/xeofs/~/miniconda3/envs/xeofs/lib/python3.11/site-packages/sklearn/utils/_set_output.py:156) def wrapped(self, X, *args, **kwargs):
--> [157](https://file+.vscode-resource.vscode-cdn.net/home/nrieger/Projects/xeofs/~/miniconda3/envs/xeofs/lib/python3.11/site-packages/sklearn/utils/_set_output.py:157)     data_to_wrap = f(self, X, *args, **kwargs)
    [158](https://file+.vscode-resource.vscode-cdn.net/home/nrieger/Projects/xeofs/~/miniconda3/envs/xeofs/lib/python3.11/site-packages/sklearn/utils/_set_output.py:158)     if isinstance(data_to_wrap, tuple):
    [159](https://file+.vscode-resource.vscode-cdn.net/home/nrieger/Projects/xeofs/~/miniconda3/envs/xeofs/lib/python3.11/site-packages/sklearn/utils/_set_output.py:159)         # only wrap the first output for cross decomposition
    [160](https://file+.vscode-resource.vscode-cdn.net/home/nrieger/Projects/xeofs/~/miniconda3/envs/xeofs/lib/python3.11/site-packages/sklearn/utils/_set_output.py:160)         return_tuple = (
    [161](https://file+.vscode-resource.vscode-cdn.net/home/nrieger/Projects/xeofs/~/miniconda3/envs/xeofs/lib/python3.11/site-packages/sklearn/utils/_set_output.py:161)             _wrap_data_with_container(method, data_to_wrap[0], X, self),
    [162](https://file+.vscode-resource.vscode-cdn.net/home/nrieger/Projects/xeofs/~/miniconda3/envs/xeofs/lib/python3.11/site-packages/sklearn/utils/_set_output.py:162)             *data_to_wrap[1:],
...
File [~/miniconda3/envs/xeofs/lib/python3.11/site-packages/xarray/core/indexes.py:1655](https://file+.vscode-resource.vscode-cdn.net/home/nrieger/Projects/xeofs/~/miniconda3/envs/xeofs/lib/python3.11/site-packages/xarray/core/indexes.py:1655), in Indexes.__getitem__(self, key)
   [1654](https://file+.vscode-resource.vscode-cdn.net/home/nrieger/Projects/xeofs/~/miniconda3/envs/xeofs/lib/python3.11/site-packages/xarray/core/indexes.py:1654) def __getitem__(self, key) -> T_PandasOrXarrayIndex:
-> [1655](https://file+.vscode-resource.vscode-cdn.net/home/nrieger/Projects/xeofs/~/miniconda3/envs/xeofs/lib/python3.11/site-packages/xarray/core/indexes.py:1655)     return self._indexes[key]

KeyError: 'dim0'

Expected behavior The model fits :)

Desktop (please complete the following information):

  • OS: Ubuntu 22
  • xeofs version 2.2.4

Additional context -NA-

nicrie avatar Mar 06 '24 11:03 nicrie