Files
2026-07-13 13:30:25 +08:00

66 lines
1.4 KiB
Python
Executable File

import numpy as np
class LabelTransformer(object):
"""
Label encoder decoder
Attributes
----------
n_classes : int
number of classes, K
"""
def __init__(self, n_classes:int=None):
self.n_classes = n_classes
@property
def n_classes(self):
return self.__n_classes
@n_classes.setter
def n_classes(self, K):
self.__n_classes = K
self.__encoder = None if K is None else np.eye(K)
@property
def encoder(self):
return self.__encoder
def encode(self, class_indices:np.ndarray):
"""
encode class index into one-of-k code
Parameters
----------
class_indices : (N,) np.ndarray
non-negative class index
elements must be integer in [0, n_classes)
Returns
-------
(N, K) np.ndarray
one-of-k encoding of input
"""
if self.n_classes is None:
self.n_classes = np.max(class_indices) + 1
return self.encoder[class_indices]
def decode(self, onehot:np.ndarray):
"""
decode one-of-k code into class index
Parameters
----------
onehot : (N, K) np.ndarray
one-of-k code
Returns
-------
(N,) np.ndarray
class index
"""
return np.argmax(onehot, axis=1)