Adds DecisionTree algorithm

This commit is contained in:
Volodymyr Orlov
2020-01-10 09:07:04 -08:00
parent a4ff1cbe5f
commit a54f7be867
8 changed files with 631 additions and 38 deletions
+4
View File
@@ -18,6 +18,10 @@ pub trait Matrix: Clone + Debug {
fn get(&self, row: usize, col: usize) -> f64;
fn get_row_as_vec(&self, row: usize) -> Vec<f64>;
fn get_col_as_vec(&self, col: usize) -> Vec<f64>;
fn set(&mut self, row: usize, col: usize, x: f64);
fn qr_solve_mut(&mut self, b: Self) -> Self;
+16
View File
@@ -135,6 +135,22 @@ impl Matrix for DenseMatrix {
self.values[col*self.nrows + row]
}
fn get_row_as_vec(&self, row: usize) -> Vec<f64>{
let mut result = vec![0f64; self.ncols];
for c in 0..self.ncols {
result[c] = self.get(row, c);
}
result
}
fn get_col_as_vec(&self, col: usize) -> Vec<f64>{
let mut result = vec![0f64; self.nrows];
for r in 0..self.nrows {
result[r] = self.get(r, col);
}
result
}
fn set(&mut self, row: usize, col: usize, x: f64) {
self.values[col*self.nrows + row] = x;
}
+22
View File
@@ -28,6 +28,14 @@ impl Matrix for ArrayBase<OwnedRepr<f64>, Ix2>
self[[row, col]]
}
fn get_row_as_vec(&self, row: usize) -> Vec<f64> {
self.row(row).to_vec()
}
fn get_col_as_vec(&self, col: usize) -> Vec<f64> {
self.column(col).to_vec()
}
fn set(&mut self, row: usize, col: usize, x: f64) {
self[[row, col]] = x;
}
@@ -509,4 +517,18 @@ mod tests {
assert_eq!(res.len(), 7);
assert_eq!(res, vec![-7., -6., -2., 1., 2., 3., 4.]);
}
#[test]
fn get_row_as_vector(){
let a = arr2(&[[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]]);
let res = a.get_row_as_vec(1);
assert_eq!(res, vec![4., 5., 6.]);
}
#[test]
fn get_col_as_vector(){
let a = arr2(&[[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]]);
let res = a.get_col_as_vec(1);
assert_eq!(res, vec![2., 5., 8.]);
}
}