ndarray icon indicating copy to clipboard operation
ndarray copied to clipboard

Outer product

Open zgbkdlm opened this issue 3 years ago • 1 comments
trafficstars

I found that ArrayBase has no equivalent method to np.outer of numpy. This is quite surprising because outer product is a standard feature and is trivial to implement.

For example, by refering to the implementation of np.outer, we can implement ArrayBase's outer as:

pub fn outer(x: &Array<f64, Ix1>, y: &Array<f64, Ix1>) -> Array<f64, Ix2> {
    let (size_x, size_y) = (x.shape()[0], y.shape()[0]);
    let x_reshaped = x.view().into_shape((size_x, 1)).unwrap();
    let y_reshaped = y.view().into_shape((1, size_y)).unwrap();
    x_reshaped.dot(&y_reshaped)
}

then

let a = array![1., 2., 3.];
let b = array![1., 2., 3.];

let outer = a.outer(&b);

There is a similar issue/pull request #690, but it implements Kronecker product not outer.

zgbkdlm avatar Jan 20 '22 14:01 zgbkdlm

A useful generalization is numpy.ufunc.outer. That would be more work to implement efficiently, though, because we couldn't reuse the matrix multiplication implementation.

jturner314 avatar Jan 22 '22 03:01 jturner314