use std::process;
use ndarray::Array;
use ndarray::Array2;
pub fn vec_i32_to_one_hot(vector: Vec<i32>, num_classes: usize) -> Array2<i32> {
vec_i32_to_one_hot_error_handle(vector, num_classes).unwrap_or_else(|err| {
println!("Error in one-hot encoding conversion: {}", err);
process::exit(1);
})
}
fn vec_i32_to_one_hot_error_handle(vector: Vec<i32>, num_classes: usize) -> Result<Array2<i32>, &'static str> {
let mut temp: Array2<i32> = Array::zeros((vector.len(), num_classes));
for outer in 0..temp.shape()[0] {
for inner in 0..temp.shape()[1] {
if vector[outer] as usize == inner {
temp[(outer, inner as usize)] = 1;
}
}
}
let y = temp;
Ok(y)
}
pub fn array_i32_to_one_hot(array: Array<i32, ndarray::Dim<[usize; 1]>>, num_classes: usize) -> Array2<i32> {
array_i32_to_one_hot_error_handle(array, num_classes).unwrap_or_else(|err| {
println!("Error in one-hot encoding conversion: {}", err);
process::exit(1);
})
}
fn array_i32_to_one_hot_error_handle(array:Array<i32, ndarray::Dim<[usize; 1]>>, num_classes: usize) -> Result<Array2<i32>, &'static str> {
let mut temp: Array2<i32> = Array::zeros((array.len(), num_classes));
for outer in 0..temp.shape()[0] {
for inner in 0..temp.shape()[1] {
if array[outer] as usize == inner {
temp[(outer, inner as usize)] = 1;
}
}
}
let y = temp;
Ok(y)
}
pub fn array_f64_to_one_hot(array: Array<f64, ndarray::Dim<[usize; 1]>>, num_classes: usize) -> Array2<i32> {
array_f64_to_one_hot_error_handle(array, num_classes).unwrap_or_else(|err| {
println!("Error in one-hot encoding conversion: {}", err);
process::exit(1);
})
}
fn array_f64_to_one_hot_error_handle(array:Array<f64, ndarray::Dim<[usize; 1]>>, num_classes: usize) -> Result<Array2<i32>, &'static str> {
let mut temp: Array2<i32> = Array::zeros((array.len(), num_classes));
for outer in 0..temp.shape()[0] {
for inner in 0..temp.shape()[1] {
if array[outer] as usize == inner {
temp[(outer, inner as usize)] = 1;
}
}
}
let y = temp;
Ok(y)
}