use crate::{
dim::Dim1,
matrix::{MatrixBase, ViewMatrix},
matrix_blas::dot::dot,
num::Num,
};
pub trait Dot<Other, T> {
fn dot(self, other: Other) -> T;
}
impl<T, S, O> Dot<O, T> for S
where
T: Num,
S: ViewMatrix + MatrixBase<Dim = Dim1, Item = T>,
O: ViewMatrix + MatrixBase<Dim = Dim1, Item = T>,
{
fn dot(self, other: O) -> T {
dot(self, other)
}
}
#[cfg(test)]
mod dot {
use crate::{
matrix::{OwnedMatrix, ToViewMatrix},
matrix_impl::OwnedMatrix1D,
};
use super::Dot;
#[test]
fn dot() {
let a = OwnedMatrix1D::from_vec(vec![1.0, 2.0, 3.0], [3]);
let b = OwnedMatrix1D::from_vec(vec![4.0, 5.0, 6.0], [3]);
let c = a.to_view().dot(b.to_view());
assert_eq!(c, 32.0);
}
}