سؤال

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.

هل كانت مفيدة؟

المحلول

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:

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top