Merge pull request #37 from smartcorelib/elasticnet

Elastic Net
This commit is contained in:
VolodymyrOrlov
2020-12-17 12:52:47 -08:00
committed by GitHub
8 changed files with 714 additions and 252 deletions
+3
View File
@@ -271,6 +271,9 @@ pub trait BaseVector<T: RealNumber>: Clone + Debug {
fn std(&self) -> T {
self.var().sqrt()
}
/// Copies content of `other` vector.
fn copy_from(&mut self, other: &Self);
}
/// Generic matrix type.
+29 -3
View File
@@ -177,6 +177,18 @@ impl<T: RealNumber> BaseVector<T> for Vec<T> {
result.dedup();
result
}
fn copy_from(&mut self, other: &Self) {
if self.len() != other.len() {
panic!(
"Can't copy vector of length {} into a vector of length {}.",
self.len(),
other.len()
);
}
self[..].clone_from_slice(&other[..]);
}
}
/// Column-major, dense matrix. See [Simple Dense Matrix](../index.html).
@@ -915,9 +927,7 @@ impl<T: RealNumber> BaseMatrix<T> for DenseMatrix<T> {
);
}
for i in 0..self.values.len() {
self.values[i] = other.values[i];
}
self.values[..].clone_from_slice(&other.values[..]);
}
fn abs_mut(&mut self) -> &Self {
@@ -1052,6 +1062,14 @@ mod tests {
assert_eq!(32.0, BaseVector::dot(&v1, &v2));
}
#[test]
fn vec_copy_from() {
let mut v1 = vec![1., 2., 3.];
let v2 = vec![4., 5., 6.];
v1.copy_from(&v2);
assert_eq!(v1, v2);
}
#[test]
fn vec_approximate_eq() {
let a = vec![1., 2., 3.];
@@ -1185,6 +1203,14 @@ mod tests {
assert_eq!(a.dot(&b), 32.);
}
#[test]
fn copy_from() {
let mut a = DenseMatrix::from_2d_array(&[&[1., 2.], &[3., 4.], &[5., 6.]]);
let b = DenseMatrix::from_2d_array(&[&[7., 8.], &[9., 10.], &[11., 12.]]);
a.copy_from(&b);
assert_eq!(a, b);
}
#[test]
fn slice() {
let m = DenseMatrix::from_2d_array(&[
+14
View File
@@ -181,6 +181,10 @@ impl<T: RealNumber + 'static> BaseVector<T> for MatrixMN<T, U1, Dynamic> {
result.dedup();
result
}
fn copy_from(&mut self, other: &Self) {
Matrix::copy_from(self, other);
}
}
impl<T: RealNumber + Scalar + AddAssign + SubAssign + MulAssign + DivAssign + Sum + 'static>
@@ -575,6 +579,16 @@ mod tests {
use crate::linear::linear_regression::*;
use nalgebra::{DMatrix, Matrix2x3, RowDVector};
#[test]
fn vec_copy_from() {
let mut v1 = RowDVector::from_vec(vec![1., 2., 3.]);
let mut v2 = RowDVector::from_vec(vec![4., 5., 6.]);
v1.copy_from(&v2);
assert_eq!(v2, v1);
v2[0] = 10.0;
assert_ne!(v2, v1);
}
#[test]
fn vec_len() {
let v = RowDVector::from_vec(vec![1., 2., 3.]);
+14
View File
@@ -176,6 +176,10 @@ impl<T: RealNumber + ScalarOperand> BaseVector<T> for ArrayBase<OwnedRepr<T>, Ix
result.dedup();
result
}
fn copy_from(&mut self, other: &Self) {
self.assign(&other);
}
}
impl<T: RealNumber + ScalarOperand + AddAssign + SubAssign + MulAssign + DivAssign + Sum>
@@ -537,6 +541,16 @@ mod tests {
assert_eq!(5., BaseVector::get(&result, 1));
}
#[test]
fn vec_copy_from() {
let mut v1 = arr1(&[1., 2., 3.]);
let mut v2 = arr1(&[4., 5., 6.]);
v1.copy_from(&v2);
assert_eq!(v1, v2);
v2[0] = 10.0;
assert_ne!(v1, v2);
}
#[test]
fn vec_len() {
let v = arr1(&[1., 2., 3.]);