Domanda

I have two arrays, x = np.arange(3) = [0,1,2,3] and y = np.arange(4) = [0,1,2].

Is there a numpy function that gives a table of all of their products ? Or example for times this would be:

x*y = [[0,0,0,0], [0,1,2,3], [0,2,4,6]]

This is not the inner product or the scalar product. This could be called the "tensor product" or something.

È stato utile?

Soluzione

For the outer product specifically there is np.outer:

>>> x = np.arange(3)
>>> y = np.arange(4)
>>> np.outer(x, y)
array([[0, 0, 0, 0],
       [0, 1, 2, 3],
       [0, 2, 4, 6]])
>>> 

More generally you can achieve this with broadcasting:

>>> x = np.arange(3)
>>> y = np.arange(4)
>>> x[..., None] * y[None, ...]
array([[0, 0, 0, 0],
       [0, 1, 2, 3],
       [0, 2, 4, 6]])
>>> 

To apply a function with two parameters over all pairs, you would define it as:

def f(x, y):
    return x * y

You can then use it as follows:

>>> f(x[..., None], y[None, ...])
array([[0, 0, 0, 0],
       [0, 1, 2, 3],
       [0, 2, 4, 6]])
>>> 

To apply a function with one parameter over the outer product you would do:

np.exp(np.outer(x, y))

or

np.exp(x[..., None] * y[None, ...])

More on broadcasting:

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top