numpy中不同大小的数组的产物

时间:2013-12-10 17:21:10

标签: python numpy scientific-computing

我有两个数组,x = np.arange(3) = [0,1,2,3]y = np.arange(4) = [0,1,2]

是否有一个numpy函数可以提供所有产品的表格?或者例如,这将是:

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

这不是内部产品或标量产品。这可以称为“张量产品”或其他东西。

1 个答案:

答案 0 :(得分:6)

对于外部产品,具体为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]])
>>> 

更一般地说,您可以通过广播实现这一目标:

>>> 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]])
>>> 

要在所有对上应用具有两个参数的函数,您可以将其定义为:

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

然后您可以按如下方式使用它:

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

要在外部产品上应用具有一个参数的函数,您可以执行以下操作:

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

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

有关广播的更多内容: