Spaces:
Running
Running
# Copyright (c) ONNX Project Contributors | |
# SPDX-License-Identifier: Apache-2.0 | |
import numpy as np | |
from onnx.reference.ops.aionnxml._op_run_aionnxml import OpRunAiOnnxMl | |
class Imputer(OpRunAiOnnxMl): | |
def _run( # type: ignore | |
self, | |
x, | |
imputed_value_floats=None, | |
imputed_value_int64s=None, | |
replaced_value_float=None, | |
replaced_value_int64=None, | |
): | |
if imputed_value_floats is not None and len(imputed_value_floats) > 0: | |
values = imputed_value_floats | |
replace = replaced_value_float | |
elif imputed_value_int64s is not None and len(imputed_value_int64s) > 0: | |
values = imputed_value_int64s | |
replace = replaced_value_int64 | |
else: | |
raise ValueError("Missing are not defined.") | |
if isinstance(values, list): | |
values = np.array(values) | |
if len(x.shape) != 2: | |
raise TypeError(f"x must be a matrix but shape is {x.shape}") | |
if values.shape[0] not in (x.shape[1], 1): | |
raise TypeError( # pragma: no cover | |
f"Dimension mismatch {values.shape[0]} != {x.shape[1]}" | |
) | |
x = x.copy() | |
if np.isnan(replace): | |
for i in range(0, x.shape[1]): | |
val = values[min(i, values.shape[0] - 1)] | |
x[np.isnan(x[:, i]), i] = val | |
else: | |
for i in range(0, x.shape[1]): | |
val = values[min(i, values.shape[0] - 1)] | |
x[x[:, i] == replace, i] = val | |
return (x,) | |