Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Outer product #1148

Open
zgbkdlm opened this issue Jan 20, 2022 · 1 comment
Open

Outer product #1148

zgbkdlm opened this issue Jan 20, 2022 · 1 comment

Comments

@zgbkdlm
Copy link

zgbkdlm commented Jan 20, 2022

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.

@jturner314
Copy link
Member

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.

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants