@@ -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.
|
||||
|
||||
@@ -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(&[
|
||||
|
||||
@@ -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.]);
|
||||
|
||||
@@ -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.]);
|
||||
|
||||
Reference in New Issue
Block a user