[][src]Function ndarray_einsum_beta::tensordot

pub fn tensordot<A, S, S2, D, E>(
    lhs: &ArrayBase<S, D>,
    rhs: &ArrayBase<S2, E>,
    lhs_axes: &[Axis],
    rhs_axes: &[Axis]
) -> ArrayD<A> where
    A: LinalgScalar,
    S: Data<Elem = A>,
    S2: Data<Elem = A>,
    D: Dimension,
    E: Dimension

Compute tensor dot product between two tensors.

Similar to the numpy function of the same name. Easiest to explain by showing the einsum equivalents:

let m1 = Array::range(0., (3*4*5*6) as f64, 1.)
            .into_shape((3,4,5,6,))
            .unwrap();
let m2 = Array::range(0., (4*5*6*7) as f64, 1.)
            .into_shape((4,5,6,7))
            .unwrap();
assert_eq!(
    einsum(
        "ijkl,jklm->im",
        &[&m1, &m2]
    ).unwrap(),
    tensordot(
        &m1,
        &m2,
        &[Axis(1), Axis(2), Axis(3)],
        &[Axis(0), Axis(1), Axis(2)]
    )
);

assert_eq!(
    einsum(
        "abic,dief->abcdef",
        &[&m1, &m2]
    ).unwrap(),
    tensordot(
        &m1,
        &m2,
        &[Axis(2)],
        &[Axis(1)]
    )
);